2016-07-19 7 views
0

私は、ワーカースレッドがコマンドを待って、それをしてから、結果を呼び出し側に返すようにしたいと思います。これは、レスポンスが戻ってきたため、通常のプロデューサ/コンシューマの問題とは異なります。プロデューサとコンシューマに両方の方法で通信するにはどうすればよいですか?

main 
{ 
construct workers 
push to shared input buffers 
notify workers 
wait 
print results from shared output buffer 
} 

worker 
{ 
wait 
read from shared input buffer 
do work 
notify main 
} 

私は正しい軌道に乗っています:

これは私が考えている何ですか?メインの待機が始まる前に作業員が応答する可能性はありますか?

あなたは正しい軌道に乗っている

+2

条件が満たされるまで実行されるスレッドがあります。次にスレッド2に通知して実行を停止します。スレッド2は目覚めて実行し、条件を満たし、スレッド1に通知して停止します。スレッド1は目を覚まして実行します。すべての作業がシリアル化されています。あなたはスレッド化の必要性を排除し、単一のスレッド化された[状態マシン](https://en.wikipedia.org/wiki/Finite-state_machine)を使用する方がよいでしょう。 – user4581301

+0

@ user4581301私の計画は複数の労働者を雇って仕事を並行して行うことです。 (私はポストを更新しました) – Josh

+0

ワーカーは再起動を期待していますか、必要に応じて新しいスレッドを作成しますか? – user4581301

答えて

2

(それが関連している場合、私はC++を使用しています)が、あなたは物事を少し簡略化し、信号や信号

main 
{ 
    push to shared input buffers 
    construct workers // create and immediately run. No need for signal 
    while more workers 
     join worker // will block until worker thread exits 
    print results from shared output buffer 
} 

worker 
{ 
    read from shared input buffer 
    do work 
} 

を待つ必要がなくなります共有バッファをどのように分割するか、または分割しないかによっては、同時書き込みから保護する必要があります。

関連する問題