2016-04-10 4 views
0

私はオンラインで少し答えを探しましたが、何もそれに明確に答えていないようです。私の質問は簡単ですが、私は5つのワーカースレッドが待ち行列に入り、その上司のスレッド(スレッド6)に待ち行列に入っていることを知らせる信号を送る必要があります。pthread_cond_signal(...)を呼び出してpthread_cond_wait(...)を呼び出すと、ウェイターが起きるでしょうか?

を、私は上司のスレッドがロックを直撃しているのであれば、キューが完全ではないことを参照してくださいによる方法に私のプログラムの残りの部分は私が達成したいものを実際に動作するかどうかということで、それは、最高のだろう作品がいっぱいになると、ボスはpthread_cond_wait(...);になり、いっぱいになるまで待ってください。さて、すべてのworkerthreadsは待ち行列に入り、待ち状態になり、最後のスレッドが入ると、彼はマスターに信号を送り、それから待ちます。だから最終的な労働者が彼の待ち時間に達すると合図するとき、最終的なヘルパーが待つまで上司はまだ待つでしょうか?なぜなら、最後のスレッドが実際に待っているまで上司には何もしたくないからです。だから最後のスレッドpthread_mutex_unlock(...)彼はpthread_cond_wait(...)を打つことを打つと私はボスを起こすことを確認したいと思います。事前に感謝、私は私の質問が明確であることを望む、私はすべてを説明する傾向がある:/

答えて

0

労働者によって送られた信号のためにボスはn回待つことができる。それが起きるたびにキューの長さをチェックし、満杯でない場合には再び待ちます。 この場合、セマフォを使用する方が良いです。

0

"ボススレッド"がpthread_cond_wait()でブロックされている場合、その関数に渡されたミューテックスを再取得できるまで実行を継続できません。待っている間にいずれかのミューテックスを解放pthread_mutex_unlock()pthread_cond_wait()(通過することができます - ボススレッドを合図しているスレッドがそのmutexを保持している場合は、シグナリングスレッドがミューテックスを解放するまで

ので、ボススレッドは続行されません)。

関連する問題