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


我看到有一个问题 pthread睡眠linux

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

概要          #包括

   unsigned int sleep(unsigned int seconds);

描述          sleep()使当前进程休眠直到秒秒   已经过了或者          信号到达时不被忽略。

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

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

谢谢。


12219
2018-05-31 19:39


起源



答案:


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


10
2018-05-31 19:45



+1用于更新您的答案以指向kernel.org。撤回我做出同样答案的答案。但是,至于“信任标准”:只有在阅读Linux文档后才这样做,因为Linux有时会故意偏离POSIX行为。 - Fred Foo
@larsmans最初我没有读过这个问题 - cnicutar
谢谢您的意见。我会做你的建议。 - istudy0
更好的是 - 写上面代码的维护者并要求他们修复bug并符合POSIX - Good Person


答案:


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


10
2018-05-31 19:45



+1用于更新您的答案以指向kernel.org。撤回我做出同样答案的答案。但是,至于“信任标准”:只有在阅读Linux文档后才这样做,因为Linux有时会故意偏离POSIX行为。 - Fred Foo
@larsmans最初我没有读过这个问题 - cnicutar
谢谢您的意见。我会做你的建议。 - istudy0
更好的是 - 写上面代码的维护者并要求他们修复bug并符合POSIX - Good Person


我的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) 仅供参考。


1
2018-05-31 19:53





@cnicutar引用的手册页说明了这一点 sleep 是  线程安全(也许这是自2011年以来的新内容?)。有趣的是,Dave Butenhof的1997年的书(“用Posix线程编程”)确实包含了一个与 sleep (P18)。 这个 是一个旧的线程(另一种)在comp.programming.threads上,Butenhof和其他人讨论 nanosleep 在pthreads的上下文中。

简而言之, nanosleep 是的,我想,好吧,但是 sleep 不是。该 nanosleep kernel.org的手册页没有说明是否 nanosleep 是线程安全的,但是 gcc睡觉的文件 说是的。


1
2017-10-22 10:04