日期:2014-05-16  浏览次数:20925 次

<linux kernel>plz do not use usleep(0)!

?


最近发现很多hpc 领域的MPI程序中在用usleep(0)?,比较差异。?后来问了之前做hpc?的同事?得到的答复是

一般用usleep(0)?的主要目的应该是:

CPU交出当前线程的执行权,让CPU去执行其他线程。也就是放弃当前线程的时间片,转而执行其他线程

?

我感觉很诧异。?Usleep(0)?来做这个事情?是POSIX要求的?还是一个意外的发现呢??我记得我之前都是用?sched_yield()?的啊。

于是有2个问题?

1 :usleep(0)?能不能让权,?

2?:如果可以和sched_yield?比到底谁更合适

我先man了一下usleep(0)?linux上?,?

Usleep?不应该大于?1s?这个是确定无疑的,?但是usleep(0)?的行为?就比较诡异了。Man?上没有明确提到?看来POSIX是不要求让权的,?这在QNX?MAC?等操作系统上?明确看到

Glibc?对于?usleep(0)?


同时linux?man?到明确写着


usleep?究竟有没有这个效果呢?

先来看几个奇怪的现象:


?执行shell?usleep?0?会明显的看到调用了


?