は、私は私がこれをで行うことができない理由をC++ 14(または17)条件変数と共有ミューテックス
std::shared_timed_mutex mutex;
std::unique_lock<std::shared_timed_mutex> lock(mutex);
std::condition_variable var;
while(!some_condition)
var.wait(lock);
条件変数のみSTDで動作するように見えるだろう::ミューテックス。しかし、なぜ?
あなたのユースケースを共有することはできますか? – inf
これは素晴らしいことですが、上記のように「書き込みロック」された 'shared_timed_mutex'を待つことができるだけでなく、' shared_lock'を使って「読み込みロック」されている間待つこともできます。ライタースレッドが情報を公開して公開できるようになるまで待つ必要があるかもしれません。 –
ユースケースは少し複雑です:グローバル(現在は)読み取り/書き込みロックを持つデータストアがあります。また、オブジェクトごとにロックします。 オブジェクトを取得する場合は、まずグローバルロックをロックし、オブジェクトを取得し、オブジェクトをロックしてグローバルロックを解放します。 オブジェクトが削除される場合があります。だから、私はオブジェクトのロックを待ってはいけません(そのロックも破棄されるので)代わりに何かが変わったときに目を覚ますスレッドを起こす条件変数があります。 最高のデザインではないかもしれませんが、デッドロックがなく、メモリをあまり使用しません。 –