2011-01-26 13 views
0

私は初心者です。既に変数をスレッドに渡した後にスレッドに渡す

私の修士論文の一部として、統計モデルをシミュレートするプログラムを作成しました。計算中、boost :: threadを使用して、「質量ベクトル中心」を処理し、計算時間を節約します。ここまでは順調ですね。

ここでは、boost :: thread(各要素が1つずつ)の各結果を取得し、再帰的回帰を実行する実行スレッドに渡したいと思います。

私の質問は:

  • がどのように私は、既存のスレッドに私の新しい計算された要素を渡すことができますか?
  • 私は新しい要素を渡すときにスレッドを "起きる"ことができますか?

誰かが私に既存の例を指摘できたら嬉しいです。

答えて

2

最も簡単な方法はstd::queueboost::mutexboost::conditional_variableを使用することです。待ち行列conditional_variable.notify_one()にプッシュした後、mutexによる待ち行列へのアクセスをラップします。コンシューマスレッドでは、結果が用意されるまでconditional_variableを待ってから処理します。

0

スレッドを別のスレッドから制御する実績のある方法は、条件付き変数を持つキューを組み合わせてメッセージを送信することです。残念ながら、boost :: threadは標準的な解決策を提供しておらず、実装する際にいくつかのトリッキーなことがあります(デッドロックの可能性、キューがいっぱいのときの動作、多態性メッセージを使用...)

0

mutexおよび/ ro semaphoreスレッドと同期変数を同期させてスレッドセーフな通信を実現します。プロセスのすべてのthreadsが同じメモリを共有するので、同じデータにアクセスできますが、スレッドセーフな方法で行う必要があります。

私はboostライブラリが任意のスレッドプリミティブを実装していますが、ここではPOSIXスレッドを使用してマルチスレッドプログラミングについての良いチュートリアルですかどうかわからないんだけど - http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

関連する問題