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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++实现读写共享锁

發布時間:2024/9/30 c/c++ 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++实现读写共享锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/raomeng1/article/details/7685421

一、使用互斥鎖和條件變量實現讀寫鎖:

class readwrite_lock { public:readwrite_lock(): stat(0){}void readLock(){mtx.lock();while (stat < 0)cond.wait(mtx);++stat;mtx.unlock();}void readUnlock(){mtx.lock();if (--stat == 0)cond.notify_one(); // 叫醒一個等待的寫操作mtx.unlock();}void writeLock(){mtx.lock();while (stat != 0)cond.wait(mtx);stat = -1;mtx.unlock();}void writeUnlock(){mtx.lock();stat = 0;cond.notify_all(); // 叫醒所有等待的讀和寫操作mtx.unlock();}private:mutex mtx;condition_variable cond;int stat; // == 0 無鎖;> 0 已加讀鎖個數;< 0 已加寫鎖 };
二、使用2個互斥鎖實現讀寫鎖:

class readwrite_lock { public:readwrite_lock(): read_cnt(0){}void readLock(){read_mtx.lock();if (++read_cnt == 1)write_mtx.lock();read_mtx.unlock();}void readUnlock(){read_mtx.lock();if (--read_cnt == 0)write_mtx.unlock();read_mtx.unlock();}void writeLock(){write_mtx.lock();}void writeUnlock(){write_mtx.unlock();}private:mutex read_mtx;mutex write_mtx;int read_cnt; // 已加讀鎖個數 };

用mutex和conditon實現寫優先的讀寫鎖

class RWLock { private:pthread_mutex_t mxt;pthread_cond_t cond;int rd_cnt;//等待讀的數量int wr_cnt;//等待寫的數量public:RWLock() :rd_cnt(0), wr_cnt(0) {pthread_mutex_init(&mxt,NULL);pthread_cond_init(&cond,NULL);}void readLock() {pthread_mutex_lock(&mxt);++rd_cnt;while(wr_cnt > 0)pthread_mutex_wait(&cond, &mxt);pthread_mutex_unlock(&mxt);}void readUnlock() {pthread_mutex_lock(&mxt);--rd_cnt;if (rd_cnt == 0 )pthread_cond_signal(&cond);pthread_mutex_unlock(&mxt);}void writeLock() {pthread_mutex_lock(&mxt);++wr_cnt;while (wr_cnt + rd_cnt >=2)pthread_cond_wait(&cond, &mxt);pthread_mutex_unlock(&mxt);}void writerUnlock() {pthread_mutex_lock(&mxt);--wr_cnt;if(wr_cnt==0)pthread_cond_signal(&cond);pthread_mutex_unlock(&mxt);} };

總結

以上是生活随笔為你收集整理的c++实现读写共享锁的全部內容,希望文章能夠幫你解決所遇到的問題。

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