使用boost::shared_mutex實現讀寫鎖
阿新 • • 發佈:2019-02-11
偉大的Boost庫給我們提供了 shared_mutex 類,結合 unique_lock 與 shared_lock 的使用,可以實現讀寫鎖。
通常讀寫鎖需要完成以下功能:
1.當 data 被執行緒A讀取時,其他執行緒仍可以進行讀取卻不能寫入
2.當 data 被執行緒A寫入時,其他執行緒既不能讀取也不能寫入
對應於功能1,2我們可以這樣來描述:
1.當執行緒A獲得共享鎖時,其他執行緒仍可以獲得共享鎖但不能獲得獨佔鎖
2.當執行緒A獲得獨佔鎖時,其他執行緒既不能獲得共享鎖也不能獲得獨佔鎖
typedef boost::shared_lock<boost::shared_mutex> read_lock; typedef boost::unique_lock<boost::shared_mutex> write_lock; boost::shared_mutex read_write_mutex; int32_t data = 1; //執行緒A,讀data { read_lock rlock(read_write_mutex); std::cout << data << std:; endl; } //執行緒B,讀data { read_lock rlock(read_write_mutex); std::cout << data << std:; endl; } //執行緒C,寫data { write_lock rlock(read_write_mutex); data = 2; }
通過 shared_lock 為 shared_mutex 上鎖之後,執行緒將獲得其共享鎖,此時其他執行緒仍可以獲得共享鎖來讀取 data,但是此時 unique_lock 將無法為 shared_mutex 上獨佔鎖,功能1實現了。通過 unique_lock 為 shared_lock 上鎖之後,執行緒將獲得獨佔鎖,此時無法再被上鎖,功能2頁實現了。