質問

10個の単純な「ワーカー」スレッドを生成する「マネージャー」スレッドを備えた簡単なアプリケーションがあります。すべての「ワーカー」スレッドを同じ条件変数(IE:Condvar)でブロックするようにしたいので、PTHREAD_COND_BROADCASTコールで10個すべてのスレッドを同時に起きてもらうように手動で信号を送信したいと思います。

私のアプリケーションの場合、スレッドがエラー状態に陥り、早期に終了する可能性があるため、10個すべてのスレッドが同期ポイントに到達するわけではありません。

1つの簡単なメカニズムは、PTHREAD_BARRIER_Tを作成し、10個のスレッドをすべてPTHREAD_BARRIER_WAITに呼び出すことです。10個のスレッドすべてがこの呼び出しを完了すると、すべてが実行を継続できます。ただし、これには、障壁がブロックを解除するために必要なスレッドの数を変更できるスレッドが必要です。これを安全に変更できるかどうかはわかりません。

さらに、障壁と同じように自動的に起動しないすべての依然として操作するスレッドを保証したいので、代わりにPTHREAD_COND_BROADCASTコールで手動で開始したいと思います。ブロードキャストコールを行う前に、まだ生きているすべてのスレッド(理想的には10)がコンドバーでブロックされていることをどのように保証しますか?

ありがとう!

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top