2011-09-20 12 views
2

私は4スレッド用にCreateThread()を使用しています。
すべてのスレッドを同時に実行したいが、メインスレッドを続行する前にすべての4が終了するのを待つ。

私はintを使用し、スレッドの始めでそれを増やしてから最後に減らしてから、メインスレッドでは一定の値を超えている間にwhileループを使用して保持しました...しかし、正しく動作しているようです。

これは可能ですか?スレッドを待っています

答えて

1

signaled statesWaitForMultipleObjectsの機能を使用すると、イベントやスレッド自体(シグナルハンドラが指す)がシグナル状態になるのを待つことができます。

これらのスレッド間で単一の変数を共有するだけで、おそらくCPUのコアに分散しているときに、おそらく同期の問題が発生している可能性があります。

同期メカニズムを使用せずに共有値をアトミックに変更する場合は、問題がないことは完全には保証されませんが、InterlockedIncrementのような「インターロックされた*」関数を使用してください。とにかくその方法を同期メカニズムとして使用しないでください。

+0

イベントは必要ありません。スレッドはWindowsで待機可能なオブジェクトです。 – Hasturkun

+0

ええ、私はそれを忘れて、それに応じて答えを変更しました。 :) – macbirdie

0

を使用でき すべての子スレッドがその後、自分の仕事を完了するまで、あなたのメインスレッドが待機することにしたい場合:

pthread_join

編集:

ああ、それはWindowsプラットフォームであります(前に気付かなかったので)使用する必要があります。

WaitForMultipleObjects

7

WaitForMultipleObjectsbWaitAllフラグをすべてのスレッドハンドルに使用してください。すべてのスレッドが終了すると、この関数が戻ります。

0

4つのスレッドを作成し、返された4つのハンドルのWaitForSingleObjectを順番に呼び出してください。 4つのスレッドがExitThreadを呼び出して終了することを確認してください。

EDIT:

または、Hasturkunの答えで指摘したように、WaitForMultipleObjectsを使用して...それは賢いだろう。 :-)

関連する問題