日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

read write spinlock

發布時間:2024/4/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 read write spinlock 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

發一個自己基于 C++11 寫的 read write spinlock,在 MinGW 4.8.2 (gcc 4.8 全面支持c++ 11,但由于gcc windows平臺 libstdc++ 目前還不支持 thread,所以用 boost 1.49 及以上版本作為thread庫)。

目前在 Xeon E5606 (4核8線程) Win2008 x64平臺上測試通過,但還需要在內存弱序的arm上做進一步測試

代碼 spinlock.cpp:

#include<atomic> #include<cassert>#define SPIN_LOCK_UNLOCK 0 #define SPIN_LOCK_WRITE_LOCK -1using std::atomic; using std::atomic_int; using std::atomic_store_explicit; using std::atomic_load_explicit; using std::atomic_compare_exchange_weak_explicit; using std::memory_order_relaxed; using std::memory_order_acquire; using std::memory_order_release; typedef atomic<int> spinlock_t;void rwlock_init(spinlock_t &l) {atomic_store_explicit(&l, SPIN_LOCK_UNLOCK, memory_order_relaxed); }void read_lock(spinlock_t &l) {int expected;int desired;while(true){expected = atomic_load_explicit(&l, memory_order_relaxed);if(expected >= 0){desired = 1 + expected;if(atomic_compare_exchange_weak_explicit(&l, &expected, desired, memory_order_relaxed, memory_order_relaxed))break; // success }}atomic_thread_fence(memory_order_acquire); // sync }void read_unlock(spinlock_t &l) {int expected;int desired;while(true){expected = atomic_load_explicit(&l, memory_order_relaxed);if(expected > 0){desired = expected - 1;atomic_thread_fence(memory_order_release); // syncif(atomic_compare_exchange_weak_explicit(&l, &expected, desired, memory_order_relaxed, memory_order_relaxed))break; // success }else{assert(false);}} }void write_lock(spinlock_t &l) {int expected;int desired;while(true){expected = atomic_load_explicit(&l, memory_order_relaxed);if(expected == SPIN_LOCK_UNLOCK){desired = SPIN_LOCK_WRITE_LOCK;if(atomic_compare_exchange_weak_explicit(&l, &expected, desired, memory_order_relaxed, memory_order_relaxed))break; // success }}atomic_thread_fence(memory_order_release); // sync }void write_unlock(spinlock_t &l) {int expected;int desired;while(true){expected = atomic_load_explicit(&l, memory_order_relaxed);if(expected == SPIN_LOCK_WRITE_LOCK){desired = SPIN_LOCK_UNLOCK;atomic_thread_fence(memory_order_release); // syncif(atomic_compare_exchange_weak_explicit(&l, &expected, desired, memory_order_relaxed, memory_order_relaxed))break; // success }else{assert(false);}} }//#include<thread> #include<boost/thread.hpp> #include<iostream>spinlock_t g_lock; long g_total; const int count = 5000;void add_job() {for(int i = 0; i < count; ++i){write_lock(g_lock);++g_total;std::cout << "Thread ++ " << boost::this_thread::get_id() << std::endl;write_unlock(g_lock);} }void read_job() {for(int i = 0; i < count; ++i){read_lock(g_lock);std::cout << g_total << std::endl;;read_unlock(g_lock);} }int main() {g_total = 0;rwlock_init(g_lock);boost::thread th1(add_job);boost::thread th2(add_job);boost::thread th3(read_job);boost::thread th4(read_job);boost::thread th5(read_job);th1.join();th2.join();th3.join();th4.join();th5.join();std::cout << "The total: " << g_total << std::endl; }

編譯命令行:

g++ -std=c++11 -Wall -O2 spinlock.cpp -I/d/Sources/boost_1_55_0 -L /d/Sources/boost_1_55_0/stage/lib/ -lboost_thread-mgw48-mt-1_55 -lboost_system-mgw48-mt-1_55

?

其它類型 spin lock

1)最簡單(非讀寫)的 spinlock 可以參考 boost::atomic 里面示例? ;

2)Linux kernel 中還有一類 write prefer 的spin lock,了解原理后也很容易實現,原理可以參考文檔 Linux Kernel Development 3rd。

轉載于:https://www.cnblogs.com/JesseFang/p/3521282.html

總結

以上是生活随笔為你收集整理的read write spinlock的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看一区二区三区视频 | 熟女俱乐部一区二区 | 欧美女优在线观看 | 久久精品黄色 | 老色驴综合网 | 在线视频免费观看 | 色亚洲色图| 国产制服丝袜在线 | 国产亚洲av片在线观看18女人 | 二区国产 | 黄瓜视频在线免费观看 | 青草视频在线观看视频 | 亚洲精品成人网 | 国产a国产片国产 | 一二三区精品 | 精品欧美一区二区三区久久久 | 亚洲AV无码成人精品区在线观 | 亚洲综合社区 | 97在线视频观看 | 成人免费av片 | 亚洲国产精品久久久久爰性色 | 一个色在线视频 | 国产精品一区二区久久 | 超碰.com| 特级毛片av| 成人黄色大片在线观看 | 亚洲 激情 | 一本亚洲 | www.四虎.| 欧美高潮视频 | 午夜精品视频一区二区三区在线看 | 金鱼妻日剧免费观看完整版全集 | 丰满人妻一区二区三区46 | 成人免费网站视频 | 蜜臀麻豆 | 97人人干 | 日日做夜夜爽毛片麻豆 | 性感美女在线 | 全黄性高潮 | 天天操天天添 | 亚洲免费视频观看 | 欧美撒尿777hd撒尿 | 91av国产视频 | 牲欲强的熟妇农村老妇女视频 | 毛片123| 久久国产成人精品 | 亚洲一区黄色 | 日本中文视频 | 91av入口| 射影院 | 欧美日韩国产精品成人 | 国产乱国产乱 | 成人深夜在线观看 | 另类视频一区 | 午夜在线小视频 | 久久久久久久久久久综合 | 中文字幕av免费在线观看 | 日韩一区二区三区精品 | 亚洲免费天堂 | 色视频在线看 | 高清av一区二区三区 | 天天做天天爱夜夜爽 | 爆操av| 别揉我奶头啊嗯一区二区 | 女性裸体不遮胸图片 | 黄色网址在线看 | 亚洲福利国产 | 日本99视频 | 国产精品第9页 | 日韩人妻无码一区二区三区99 | 2018国产大陆天天弄 | 亚欧成人 | 成人免费黄色片 | 日本欧美色 | 国产一级性生活 | 97在线观看视频 | 日韩成人一区 | 欧美综合自拍亚洲综合图片区 | 爱情岛亚洲品质自拍极速福利网站 | 粗大的内捧猛烈进出视频 | 国产精品国产三级国产aⅴ下载 | 国产麻豆天美果冻无码视频 | 强乱中文字幕av一区乱码 | 激情欧美亚洲 | 伊人9999| 成人av高清 | 成年人免费在线观看 | 美女mm131爽爽爽免费动视频 | 国产精品a级 | 噜噜噜久久久 | 欧美在线一二 | 精品三级 | 中文字幕人妻一区二区三区视频 | 香蕉视频网页版 | 爆操巨乳 | 亚洲综合第一页 | 国产女女做受ⅹxx高潮 | 亚洲AV无码国产日韩久久 | 法国空姐电影在线观看 |