2011-01-11 9 views
1

Noobの質問オブジェクト:Win32のイベントを使用すると、

このリンクはでCreateEventとのCreateThread

http://msdn.microsoft.com/en-us/library/ms686915(v=vs.85).aspx

の一例を示しThreadProcが本当にスレッドセーフされている場合私の質問はありますか?

特に、dwWaitResult変数。すべてのスレッドが同じイベントで待機しているので、このコードは機能しますが、異なるイベントが作成されていることが判明しました。たとえば、これは正しく機能しませんでしたか?

答えて

3

dwWaitResult変数は、その関数のローカル変数です。したがって、個々のスレッドにはそれぞれ独自のコピーがあり、変数がスレッドセーフであることが保証されます。各スレッドには独自のスタックがあるため、すべてのローカル変数は個々のスレッドに固有です。

+0

"したがって、すべてのローカル変数は個々のスレッドに固有です。"変数がローカルで非静的なため、各呼び出し側(スレッド)が変数dwWaitResultの個別のインスタンス化を持つことは事実ですか? – Eric

+0

@エリックM、はい。変数が関数内で静的としてマークされている場合、その変数はすべてのインスタンスで共有されます。 –

0

イベントは名前で作成されるため、イベントがすでに作成されている場合は、他のスレッドで同じ名前のイベントを「作成」すると再利用されます。その結果、サンプルコードはスレッドセーフです。

関連する問題