upgrade_lock と upgrade_unique_lock の違いはなんだ:http://bit.ly/fmvM3l
2010-12-14 01:33:09@hajimehoshi upgrade_lockはshared_lockを獲得しているスレッドが他に居ても獲得可能。upgrade_lockからupgrade_unique_lockに昇格する際にshared_lockが全部開放されるまで待たされる。と記憶。
2010-12-14 01:46:54@kumagi upgrade_to_unique_lock は upgrade_lock を取ってないと取れない、という認識であってますか?
2010-12-14 01:47:36@hajimehoshi upgrade_*はどっちもwrite_lockなので、upgrade_lockは複数のスレッドから取得できません。また、upgrade_to_unique_lockのコンストラクタでupgrade_lockを要求します。
2010-12-14 01:48:56@kumagi なるほどー。一般的な Reader-Writer パターンよりもきめ細かい処理ができるんですね。
2010-12-14 01:53:52@hajimehoshi 「writerはチェックするだけで時々書き込みを行わないかもしれない」場合に並列性が高まりそうですが、毎回必ず書き込みを行う場合はあんまり恩恵がないかもです。
2010-12-14 01:57:05upgrade_lock かかってから upgrade_to_unique_lock がかかる直前までの範囲は、 writer 一つしか入れない。また、他で reader が動いているかもしれない。
2010-12-14 01:55:26@repeatedly 実際に書き込みを行うために本格的にreaderを締め出したくなった時に使います。upgrade_lockだけだとまだ他にreaderが居る場合があるので。
2010-12-14 02:01:53@kumagi あれ,でもwrite lockってことは,書き込みの時は全ての操作をロックするよね?readerはそこで止まるんじゃないのん?
2010-12-14 02:04:12@repeatedly https://gist.github.com/22c650c292e94631bb84 コードで語るとこんな感じです。
2010-12-14 02:20:13あーなるほど,upgrade_lock同士が共存不可なのか.どうやって他のupgrade_lockの問い合わせを制御するのかと.
2010-12-14 02:28:12upgrade_to_unique_lockってのは,それ以降のlockの獲得を禁止して,今まで獲得されたロックが解放されるまでブロック?
2010-12-14 02:31:00@repeatedly templateでmutexがプラガブルになってるのでそこの実装は使ってるmutexによりますが、boost::shared_mutexを使う限りはupgrade_to_unique_lockの確保待ちだとそれ以上shared_lockは取れなさそうです。
2010-12-14 02:44:08