c++实现读写共享锁
生活随笔
收集整理的這篇文章主要介紹了
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++实现读写共享锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现计算器功能
- 下一篇: linux 多线程 多进程同步