从pthread调用sleep()是否将线程置于休眠或进程状态?

时间:2011-05-31 19:39:15

标签: c pthreads sleep

我看到有关于pthread sleep linux

的问题

然而,当我在我的linux机器上查找man page时,我看到以下内容。

  

概要          #include

   unsigned int sleep(unsigned int seconds);
     

说明          sleep()使当前进程休眠直到秒秒   已过了或过了          信号到达时不会被忽略。

所以我的问题是,我想知道我应该遵循哪个手册页来让线程睡眠。另外,如果两者都是真的,我该如何控制呢?

我可以编写一些代码来测试它,但我想确保听到其他人的一些反馈。

谢谢。

3 个答案:

答案 0 :(得分:10)

您的手册页中的措辞可能有误。信任标准并信任 the man page on kernel.org 。写下发行版文档的维护者,并告诉他们更新手册页。

答案 1 :(得分:1)

我的Linux机器上有两个关于睡眠功能的手册页:

$ man -k sleep
sleep (3)   - Sleep for the specified number of seconds
sleep (3p)  - suspend execution for an interval of time

第一个说“当前的过程”和你的一样 第二个说“调用线程”但它的序言说明:

  

本手册页是POSIX程序员手册的一部分。此接口的Linux实现可能有所不同(请参阅相应的Linux手册页          Linux行为的详细信息),或者可能无法在Linux上实现该接口。

所以我得出结论:sleep(3)描述了实际行为,而sleep(3p)仅供参考。

答案 2 :(得分:1)

@cnicutar引用的手册页说sleep 线程安全(也许这是2011年以来的新内容?)。有趣的是,Dave Butenhof的1997年着作('用Posix线程编程')确实包含了一个用sleep(p18)睡眠线程的例子。 This是comp.programming.threads上的旧线程(另一种),其中Butenhof和其他人在pthreads的上下文中讨论nanosleep

简而言之,我认为nanosleep是好的,但sleep不是。 kernel.org上的nanosleep手册页没有说明nanosleep是否是线程安全的,但gcc sleeping docs表示它是。