1. 程式人生 > >使用boost::shared_mutex實現讀寫鎖

使用boost::shared_mutex實現讀寫鎖

偉大的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頁實現了。