13
Hajime Hoshi (星一) @hajimehoshi
Boost って Read-Write Lock ないんだ…
Hajime Hoshi (星一) @hajimehoshi
boost::shared_mutex 使えばいいんですかね。
Hajime Hoshi (星一) @hajimehoshi
upgrade_lock と upgrade_unique_lock の違いはなんだ:http://bit.ly/fmvM3l
汎用kumAGI @kumagi
@hajimehoshi upgrade_lockはshared_lockを獲得しているスレッドが他に居ても獲得可能。upgrade_lockからupgrade_unique_lockに昇格する際にshared_lockが全部開放されるまで待たされる。と記憶。
Hajime Hoshi (星一) @hajimehoshi
@kumagi upgrade_to_unique_lock は upgrade_lock を取ってないと取れない、という認識であってますか?
汎用kumAGI @kumagi
@hajimehoshi upgrade_*はどっちもwrite_lockなので、upgrade_lockは複数のスレッドから取得できません。また、upgrade_to_unique_lockのコンストラクタでupgrade_lockを要求します。
Hajime Hoshi (星一) @hajimehoshi
@kumagi なるほどー。一般的な Reader-Writer パターンよりもきめ細かい処理ができるんですね。
汎用kumAGI @kumagi
@hajimehoshi 「writerはチェックするだけで時々書き込みを行わないかもしれない」場合に並列性が高まりそうですが、毎回必ず書き込みを行う場合はあんまり恩恵がないかもです。
Hajime Hoshi (星一) @hajimehoshi
upgrade_lock かかってから upgrade_to_unique_lock がかかる直前までの範囲は、 writer 一つしか入れない。また、他で reader が動いているかもしれない。
SKSの申し子 @repeatedly
upgrade_lockからupgrade_unique_lockへと昇格させるのって,どういう時に使うの?
汎用kumAGI @kumagi
@repeatedly 実際に書き込みを行うために本格的にreaderを締め出したくなった時に使います。upgrade_lockだけだとまだ他にreaderが居る場合があるので。
SKSの申し子 @repeatedly
@kumagi あれ,でもwrite lockってことは,書き込みの時は全ての操作をロックするよね?readerはそこで止まるんじゃないのん?
SKSの申し子 @repeatedly
あーなるほど,upgrade_lock同士が共存不可なのか.どうやって他のupgrade_lockの問い合わせを制御するのかと.
SKSの申し子 @repeatedly
upgrade_to_unique_lockってのは,それ以降のlockの獲得を禁止して,今まで獲得されたロックが解放されるまでブロック?
汎用kumAGI @kumagi
@repeatedly templateでmutexがプラガブルになってるのでそこの実装は使ってるmutexによりますが、boost::shared_mutexを使う限りはupgrade_to_unique_lockの確保待ちだとそれ以上shared_lockは取れなさそうです。
SKSの申し子 @repeatedly
結論: メッセージパッシング使え

コメント

コメントがまだありません。感想を最初に伝えてみませんか?

ログインして広告を非表示にする
ログインして広告を非表示にする