2016-06-01 21 views
1

シングルコアマシンでは、現在実行中のスレッドが別のスレッドが現在保持しているロックの解放を待っているためにスピン待機する場合は、スピン待機ではなく、現在のスレッドとにかく待ち行列にロックが保持されていますか?シングルコアCPUでThread.SpinWaitはどのように役立ちますか?

したがって、複数のコアを持つマシンでのみ有効なロックの解放を待っていますか?

この問題は、Slimオブジェクト(SemaphoreSlimおよびReaderWriterLockSlimなど)でも同様です。

+1

私はあなたの前提が正しいと信じていますが、私は***の仮定をバックアップするという事実はありませんので、答えとして投稿するつもりはありません。 –

+0

@ScottChamberlainありがとうございます。 –

答えて

2

はい、スピンウェイトはシングルコアマシンでは役に立たず、逆効果ですが、そのようなマシンはますます稀です。

.NET 4.0では、より高度なSpinWait構造が導入されています。シングルコアマシンで使用すると、すぐに現在のスレッドのタイムスライスを放棄し、他のスレッドで進行を許可します。 (ハードウェアがバックグラウンドで進歩することができるので、この意味ではスピン・ウェイティングはシングルコア・マシンでもハードウェア・ドライバーには意味をなさないが、ハードウェア・ドライバーはILでは書かれていない。)

同様に、*Slimシングルコアマシンで使用する場合、タイプは回転を使用しません。 Slimとは異なり、より速く、よりシンプルで、必要なリソースが少なくて済むように書かれています(Semaphoreは、カーネルオブジェクトに裏打ちされています。たとえば、SemaphoreSlimはそうではありません)。

一般に、コアの数に関係なく、*Slimのタイプを使用する必要があります。実際に回転しないため、実際に回転が必要な場合はほとんどの場合(ほとんどの場合、独自の同期プリミティブを実装しない限り)構造体を使用します。そうするのが理にかなっていない限り。

+1

SpinWaitは、非常に短い(15ms未満の)ループしているコードのレート制限を待っているときにも役立ちます。 (66Hz以上では、ループ間にSpinWaitsが必要です) –

+0

@ScottChamberlainありがとうございます。ループのレート制限とは何ですか?また、どこでループを読むことができますか? –

+0

@ JeroenMosterfありがとうございました。 –

関連する問題