【问题标题】:What does asm("pause") do and why to use itasm("pause") 做什么以及为什么要使用它
【发布时间】:2012-04-26 22:29:27
【问题描述】:

我在其他人的代码中看到了 asm("pause"),我想知道它的作用。代码由 Linux 上的 g++ 编译。

这一行在另一个线程中的循环中,如果发生更新,它会不断轮询。我怀疑它会使程序在再次轮询之前暂停一点,但我想知道(1)我的猜测是否正确(2)为什么需要暂停?我们在其上运行代码的机器有很多处理器,而我的线程完全只是不断地轮询它。

【问题讨论】:

  • 是内核代码,还是应用程序代码?

标签: linux assembly x86


【解决方案1】:

基本上这称为自旋循环或忙等待。它会消耗尽可能多的 CPU 资源。这会浪费 CPU 处理能力并增加功耗。

通过放置暂停指令,您是在暗示处理器“这是一个自旋循环”。这迫使处理器不要太聪明而无法做出不必要的预测(优化)。此外,在某些情况下(例如超线程),它可以释放 CPU 时间用于其他事情。

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 1970-01-01
    • 2011-10-22
    • 2019-03-23
    • 2020-10-25
    • 1970-01-01
    • 2015-09-08
    • 2017-04-20
    • 2023-03-06
    相关资源
    最近更新 更多