nanosleep与零时间值有什么关系?

时间:2016-05-29 17:21:56

标签: c libc

这段代码会做什么?

struct timespec wait;
wait.tv_sec = 0;
wait.tv_nsec = 0;
nanosleep(&wait, NULL);

 ...
 clock_nanosleep(CLOCK_REALTIME, 0, &wait, NULL);

它会被优化掉吗?或者进程简单地抢占并立即返回运行队列?或者什么?

使用nanosleep和clock_nanosleep之间有什么区别,这里给出的参数完全正确吗?

2 个答案:

答案 0 :(得分:0)

线程是否实际上会被暂停一段时间似乎无法保证。如果需要特定行为,最好绕过呼叫或使用0以外的值。

答案 1 :(得分:0)

  

它会被优化掉吗?

不,它不能可靠地减少到一个nop。

  

或过程简单地抢占并立即恢复运行   队列?

是的,对于某些值"立即"。看起来没有任何类型的零超时短路径,因此它将像任何其他过期超时一样重新安排。

  

使用nanosleep和clock_nanosleep之间有什么区别,这里给出的参数完全正确吗?

根据nanosleep(2)没有。