3

この質問は「SpinWait vs. Block?」に要約できると思いますが、ほぼすべての C# スレッド化チュートリアルで次の呼び出しが提案されている理由について、もっと興味深い答えがあるかもしれないと思いました。

Thread newThread = new Thread(new ThreadStart(ThreadMethod));
newThread.Start()
while (!newThread.isAlive()) ;
Thread.Sleep(1); // Allow the new thread to do some work

次のようにブロックするのとは対照的に:

Thread newThread = new Thread(new ThreadStart(ThreadMethod));
newThread.Start()
while (!newThread.isAlive()) Thread.Sleep(1);
Thread.Sleep(1); // Allow the new thread to do some work

私の非常に力ずくのテスト (DateTime.Ticks への呼び出しで while ループを囲む) では、実際には何も明らかになりません (両方のインスタンスで差が 0 ティックであると言います)。

紡績がより効率的になるように、スレッド作成プロセスは十分に短いですか? それとも、ほとんどのチュートリアルでは回転を推奨していますか?

4

3 に答える 3

2

なぜあなたがどちらを使うのかわかりません-頭のてっぺんから、新しいスレッドが生きているまで呼び出し元のスレッドをブロックするユースケースは考えられません。それは何でも実行しました。呼び出し元のスレッドに進む前に、新しいスレッドで何らかのコードが実行されるのを待つ必要がある場合は、WaitHandle または SpinLock を使用します。

于 2011-06-16T01:09:07.270 に答える
1

スレッドの開始時にイベントを設定し、メインスレッドがイベントを待機するようにすることができます。スピンウェイトはありません。

于 2011-06-16T01:15:51.400 に答える
0

この記事では、SpinWaitの使用について説明し、さまざまなタイプのスリープについても言及していますhttp://www.emadomara.com/2011/08/spinwait-and-lock-free-code.html

于 2011-08-12T04:46:41.760 に答える