线程在Linux中暂停的最短时间

Met*_*est 8 c linux multithreading multicore

在我的应用程序中,线程需要暂停一段时间(100个时钟周期).暂停的一种方法是调用nanosleep,但我想它需要对内核进行系统调用.现在我想暂停而不去内核.

请注意,我有足够的内核来运行我的线程,并且我将每个线程绑定到一个单独的内核,因此即使是可以暂停内核一段时间的指令也会很好.我正在使用x86.我只是希望线程在暂停时暂停.我不希望繁忙的循环或系统调用内核.是否有可能做到这一点?我可以暂停一个帖子的最短时间是多少?

Ste*_*e-o 7

_mm_pause 在忙碌等待循环中是要走的路.

不幸的是,它提供的延迟可能随每个处理器系列而变化

http://siyobik.info/main/reference/instruction/PAUSE

Linux上GCC的示例用法:

#include <xmmintrin.h>

int main (void) {
    _mm_pause();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在启用MMX的情况下编译:

gcc -o moo moo.c  -march=native
Run Code Online (Sandbox Code Playgroud)

您也可以随时使用内联汇编程序:

__asm volatile ("pause" ::: "memory");
Run Code Online (Sandbox Code Playgroud)

对于某些英特尔工程师,您可能会发现这对确定暂停成本非常有用:

NOP指令可以在0.4-0.5时钟之间,PAUSE指令可以消耗38-40个时钟.

http://software.intel.com/en-us/forums/showthread.php?t=48371