14

他の人のコードでasm( "pause")を見ましたが、それが何をするのか疑問に思います。コードはLinux上のg++によってコンパイルされます。

この行は別のスレッドにあるループ内にあり、更新が発生した場合は常にポーリングします。再度ポーリングする前にプログラムが少し一時停止するのではないかと思いますが、(1)私の推測は正しいですか(2)なぜ一時停止する必要があるのですか?コードを実行するマシンには多くのプロセッサがあり、スレッドは完全にそれをポーリングし続けます。

4

1 に答える 1

22

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

一時停止命令を入れることで、プロセッサに「これはスピンループです」とほのめかしていることになります。これにより、プロセッサは、不要な予測(最適化)を行うのに賢くなりすぎないようになります。また、場合によっては他の目的(ハイパースレッディングなど)に使用するためにCPU時間を解放します。

于 2012-04-15T05:40:32.487 に答える