2

処理中の制御スレッドとワーカー スレッドのグループがあります。作業モードは次のようになります。
(1) すべてのワーカー スレッドと制御スレッドが実行されています。
(2) 制御スレッドが条件の変更をチェックすると、すべてのワーカー スレッドが中断されます。
(3) すべてのワーカー スレッドが中断されていることを確認した後、制御スレッドはメモリ内の内容を変更します。
(4) 変更後、制御スレッドはすべてのワーカースレッドを再開します。
私の質問は次のとおりです。
(1) ステップ 2 とステップ 4 で、スレッドの一時停止とすべてのワーカー スレッドの再開を制御するにはどうすればよいですか? pthread_cond_wait と pthread_cond_signal の使用を検討していますが、制御スレッドとワーカー スレッドでしか使用できないようです。
(2) ステップ 3 で、すべてのワーカー スレッドが中断されていることを確認するスレッドを制御するにはどうすればよいですか? カウンターの利用を考えているのですが、何か良い方法はありますか?

4

2 に答える 2

1
In step 2 and step 4, how can control thread suspend and resume all worker threads? I consider using pthread_cond_wait and pthread_cond_signal, but it seems only OK for a control thread and a worker thread.

pthread でスレッドに優先度を割り当てることができます。また、制御スレッドにより高い優先度を割り当てて、制御スレッドが最初に動作し、他のスレッドを待機させるようにスケジュールできます。

 After checking all worker threads are suspended, the control thread modifies some contents in memory.

共有メモリとしてですか?共有メモリの場合、mutex ロックを設定して、一度に 1 つのスレッドがクリティカル セクションにアクセスできるようにすることができます。

問題を理解しやすいコードがある場合。

于 2013-07-22T09:31:18.533 に答える