问题描述
|
我看到有一个关于pthread sleep linux的问题
但是,当我在Linux机器上查找手册页时,会看到以下内容。
概要
#包括
unsigned int sleep(unsigned int seconds);
描述
sleep()使当前进程进入休眠状态,直到几秒钟
已经过去或
信号到来,这是不容忽视的。
所以我的问题是我想知道应该让哪个手册页进入线程休眠状态。此外,如果两个都成立,我该如何控制?
我可能可以编写一些代码对其进行测试,但是我想确保也能听到其他人的反馈。
谢谢。
解决方法
您的手册页中的措词可能是错误的。信任标准并信任kernel.org上的手册页。写给发行版文档的维护者,并告诉他们更新手册页。
, 我的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)
仅在此处提供参考。
, @cnicutar引用的手册页指出sleep
不是线程安全的(也许自2011年以来是新的?)。有趣的是,Dave Butenhof \'s在1997年出版的《用Posix线程编程》中确实包含了一个示例,该示例使用sleep
(p18)休眠线程。这是comp.programming.threads上的旧线程(另一种线程),其中Butenhof和其他人在pthreads上下文中讨论nanosleep
。
简而言之,我认为nanosleep
是好的,但是sleep
不是。 kernel.org上的nanosleep
手册页没有说明nanosleep
是否是线程安全的,但是gcc睡眠文档说的是。