私はスレッドの2つのグループを持っているとしましょう。 1つのグループの機能は、要素を配列に追加することです。もう1つのグループの機能は、配列に同じ要素が含まれている場合、要素を配列から削除することです。ルールは、スレッドが空であり、待機しなければならない場合、スレッドは配列から要素を削除できないということです。モニターは、この同期の問題を解決するために使用されます。condition_variable wait関数が呼び出されたときにスレッドはどのように待機しますか?
すべてのスレッドが同時に起動し、コンシューマスレッドが最初にミューテックスをロックしてから、配列が空でないか、条件が偽であるかをチェックしてミューテックスのロックを解除するシナリオを考えてみましょう。次に、プロデューサスレッドは最初にミューテックスをロックし、要素を追加し、待機中のすべてのスレッドに通知し、ミューテックスをロック解除します。疑問は、待機スレッドが通知された後、待機中のスレッドがその要素を削除しようとするか、mutexが再び解放され、任意のスレッドが偶然それをロックする可能性があり、待っているスレッドが条件が失敗した後に終了しますが、それがスレッドプールに戻されたとしましょう。
いくつかの(擬似的な)コードを表示したほうがいいですが、あなたが求めていることを理解することは非常に難しいです。 – Slava