boostの使用::shared_mutexは読み書きロックを実現


偉大なBoostライブラリはsharedを提供してくれましたmutexクラス、unique_を結合ロックとshared_lockの使用により、読み書きロックを実現できます.
通常、読み書きロックには次の機能が必要です.
1.dataがスレッドAによって読み込まれた場合、他のスレッドは読み込めますが書き込めません
2.dataがスレッドAに書き込まれると、他のスレッドは読み取りも書き込みもできない
機能1,2に対応して、以下のように説明することができる.
1.スレッドAが共有ロックを取得した場合、他のスレッドは共有ロックを取得できるが、排他ロックは取得できない
2.スレッドAが排他ロックを取得した場合、他のスレッドは共有ロックも排他ロックも取得できない
typedef boost::shared_lock<:shared_mutex> read_lock;
typedef boost::unique_lock<: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_を通してロックはshared_mutexがロックされると、スレッドはその共有ロックを取得し、他のスレッドはdataを読み出すために共有ロックを取得することができますが、unique_ロックはshared_にできませんmutex上の独占ロック、機能1が実現しました.unique_経由ロックはshared_ロックロックがロックされるとスレッドは独占ロックを獲得し,このときロックされなくなり,機能2ページが実現した.