#include#include#include#include#includeusing namespace std;
class semaphere
semaphere(const semaphere& s)=delete;
semaphere & operator=(const semaphere& s)=delete;
void wait());
m_count--;
} void signal()
m_cv.notify_one();
} private:
mutex m_mtx;
condition_variable m_cv;
int m_count;
}; //讀者優先
semaphere mtx1(1),mtx2(1),mtx3(1),r(1),w(1);
//mtx1 用於控制 reader_count
//mtx2 用於控制 write_count
//mtx3 用於實現讀者併發
//r 用於控制讀者執行緒
//w 用於控制寫者執行緒
//我也不知道這麼理解有沒有問題
int reader_count=0;
int write_count=0;
string read_context="hello world";
int w_times=0;
void reader()
void write_first()
mtx2.signal();
w.wait();
this_thread::sleep_for(chrono::milliseconds(1000));
read_context="hello world"+to_string(++w_times);
w.signal();
mtx2.wait();
write_count--;
if(write_count==0)
mtx2.signal();
} int main()
c 11實現寫優先的讀寫鎖
文章 先直接貼出 ifndef write first rw lock h define write first rw lock h include include class wfirstrwlock read cnt void lock write inwriteflag true void r...
C 11實現觀察者模式
c 11中的std function可以接受函式指標 std bind lambda表示式等函式,可以達到很鬆的耦合,簡直就是為事件機制設計的。但是不能簡單判斷兩個std function是不是同一函式,所以下面我用id來標識listener 我模仿c 的委託實現了觀察者模式 pragma once...
讀者寫者問題的寫者優先演算法
演算法如下 有讀者 reader 和寫者 writer 兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀程序可以同時對檔案執行讀操作 只允許乙個寫程序往檔案中寫資訊...