条件変数の使用に関連するコードのデッドロックに問題があります。これは純粋なコードの質問よりも設計上の問題のほうが多いです。正しいデザインを理解すれば、実際にコードを書くのに問題はありません。私は以下のシナリオを持っています:条件変数デッドロック
- スレッドAは条件変数を待ちます。
- スレッドBはnotify_allを呼び出し、スレッドAはウェイクアップします。
これはもちろん私が起こりたいことであり、すべてが期待どおりに動作するときに起こります。しかし時々、私は次のシナリオを代わりに得ます:
- スレッドAは、条件変数の待機を開始する直前にコードを実行します。
- スレッドBはスレッドAが待機していると考えてnotify_allを呼び出します。
- スレッドAは、スレッドBが待機を停止するように指示したことを認識せずに、条件変数の待機を開始します。デッドロック。
これを解決する最善の方法は何ですか?スレッドAで実際に待機しているかどうかを確認する信頼できる方法は考えられません。なぜ私はスレッドBでnotify_allを呼び出すべきかを知るためにtimed_lockに頼らざるを得ませんか?私は嫌いだ。
あなたはどのライブラリを使用していますか?どのようなOSですか? –
セマフォを使用します。 –