2012-04-15 9 views
10

他の人のコードでasm( "pause")を見ました。このコードはLinuxのg ++​​によってコンパイルされています。asm( "pause")は何を行い、なぜ使うのですか

この行はループ内にあり、別のスレッドにあります。このスレッドは、更新が行われたときに常にポーリングします。私はそれが再びポーリングする前にプログラムを一時停止させると思うが、(1)私の推測は正しいのだろうか?(2)なぜ一時停止する必要があるのだろう?私たちがコードを実行するマシンには多くのプロセッサがあり、スレッドはまったくポーリングし続けます。

+0

カーネルコードですか、アプリケーションコードですか? –

答えて

15

基本的にスピンループまたはビジー待機と呼ばれます。できるだけ多くのCPUリソースを消費します。これは、CPU処理能力を浪費し、消費電力を増加させます。

pause命令を入力することで、「これはスピンループです」というプロセッサのヒントになります。これにより、プロセッサは余計な予測(最適化)を行うことができなくなります。また、場合によっては他のものに使用するCPU時間を解放します(例えば、ハイパースレッディング)。

関連する問題