1

私はthreadProcを持っています

void* ThreadProc(void* xyz)
{
    //do some work..
}

今メインスレッドから..私はこのスレッドを呼び出し、それが終了するのを待ちたくない

WaitForSingleObject(hThread, 0)

現在、私のプログラムの流れは、スレッドへの最初の呼び出しが終了せず、2回目に同じ ThreadProc() が呼び出されるケースが発生する可能性があります。

だから... 1. OSはこのシナリオをどのように処理しますか? この種のプログラムは予期しない結果をもたらしますか? 2. これが間違った方法である場合、正しい方法は何ですか?

最終的には、1 つの関数を非同期で呼び出す必要があるため、同時に複数のインスタンスを実行している可能性があります。

4

1 に答える 1

2

すべてのスレッドには個別のスタックがあるため、スレッド コールバック関数内のすべての変数がローカルである限り、競合は発生しません。ただし、グローバル/静的変数にアクセスする場合、変数はすべてのスレッド間で共有されるため、それらへのすべてのアクセスは慎重に処理する必要があります。そのような場合は、ミューテックス/セマフォ/クリティカル セクションを使用します。同じことは、スレッドセーフかどうかわからないライブラリ関数を呼び出す場合にも当てはまります。

この種のプログラムは予期しない結果をもたらしますか?

これは、スレッド コールバック関数の本体に完全に依存します。ただし、を使用して待つ必要がありWaitForSingleObject(hThread, INFINITE)ます。現在、何もしない 0ms 待機しています。

于 2013-09-11T06:59:06.793 に答える