スレッド間通信について一般的な質問があります。
現在、私はたくさんのC ++スレッド(〜15)を使用しています。
それらはすべて、処理するデータを取得するために互いにBusyWait(Polling)を使用しています。ただし、CPU使用率を低く抑えることは困難であり、良好なパフォーマンスを提供し、コンテキストスイッチを多用しないようにします。
だから私は条件変数とシグナルを見ています。スレッドで.Wait()に入り、.Signal()を呼び出す別のスレッドを待つという一般的な概念を理解していると思います。
質問#1)私の問題は概念的なものかもしれませんが、シグナルを待機しているスレッドが待機中にSUSPENDEDになると、それ自体ではアクションを実行できなくなります。とにかくそれがいくつかのアクションを実行するためにそれ自体で目を覚ますようにすることはありますか?
質問#2)さらに、私のクラスは両方向にデータを渡すために使用されます。ただし、ミドルクラスが別のクラスからのシグナルを待機している場合、そのクラスにシグナルを送信することはできません。そのような:
_________ _________ __________
| Class A |---newData Signal--->| Class B |---newData Signal--->| Class C |
| | |(WAITING)|<---newData Signal---| |
--------- --------- ----------
したがって、クラスBがCからの.Signal()に対して.Wait()をオンにしている場合、Aからの新しいシグナルを処理することはできません。
A && Cの両方が同じ「newData」信号Bを送信して、それをウェイクアップすることは可能ですか?信号をA&&Cと区別することは可能でしょうか。
私はACEフレームワークを使用してC++を使用してこれをコーディングしており、Boostに切り替える可能性があります。しかし、これは十分に一般的であり、どのOSにも答えを適用できると思います(うまくいけば)。
ありがとう