【发布时间】:2012-04-26 22:29:27
【问题描述】:
我在其他人的代码中看到了 asm("pause"),我想知道它的作用。代码由 Linux 上的 g++ 编译。
这一行在另一个线程中的循环中,如果发生更新,它会不断轮询。我怀疑它会使程序在再次轮询之前暂停一点,但我想知道(1)我的猜测是否正确(2)为什么需要暂停?我们在其上运行代码的机器有很多处理器,而我的线程完全只是不断地轮询它。
【问题讨论】:
-
是内核代码,还是应用程序代码?
我在其他人的代码中看到了 asm("pause"),我想知道它的作用。代码由 Linux 上的 g++ 编译。
这一行在另一个线程中的循环中,如果发生更新,它会不断轮询。我怀疑它会使程序在再次轮询之前暂停一点,但我想知道(1)我的猜测是否正确(2)为什么需要暂停?我们在其上运行代码的机器有很多处理器,而我的线程完全只是不断地轮询它。
【问题讨论】:
基本上这称为自旋循环或忙等待。它会消耗尽可能多的 CPU 资源。这会浪费 CPU 处理能力并增加功耗。
通过放置暂停指令,您是在暗示处理器“这是一个自旋循环”。这迫使处理器不要太聪明而无法做出不必要的预测(优化)。此外,在某些情况下(例如超线程),它可以释放 CPU 时间用于其他事情。
【讨论】: