pthread睡眠linux

时间:2010-09-03 04:44:34

标签: c++ multithreading pthreads

我正在使用pthreads创建一个包含多个线程的程序。

sleep()导致进程(所有线程)停止执行还是只调用我调用sleep的线程?

5 个答案:

答案 0 :(得分:33)

只是线程。 POSIX documentation for sleep()说:

  

sleep()函数将导致调用线程暂停执行...

用法:sleep(10) 10秒钟睡眠。

答案 1 :(得分:7)

试试这个,

#include <unistd.h>

usleep(microseconds);

答案 2 :(得分:5)

我通常使用nanosleep,它运行正常。 Nanosleep取决于调用线程的执行。我有同样的疑问,因为在某些手册中,睡眠是指整个过程。

答案 3 :(得分:-1)

sleep()函数不会停止特定线程,但是会在指定的时间内停止整个过程。为了停止特定线程的执行,我们可以使用一个pthread条件对象,并使用pthread_cond_timedwait()函数使线程等待特定的时间。每个线程都有自己的条件对象,并且永远不会从任何其他线程接收信号。

答案 4 :(得分:-1)

在实践中,很少有您只想睡一小段延迟(毫秒)的情况。对于Linux,请阅读time(7),另请参见this answer。对于超过一秒钟的延迟,请参见sleep(3),对于较小的延迟,请参见nanosleep(2)。 (一个反例可能是RasPerryPi,它运行某些嵌入式Linux并驱动机器人;在这种情况下,您确实确实可能每十分之一秒就从某些硬件设备读取一次)。当然,正在休眠的只是单个内核调度的任务(因此是进程或线程)。

您可能想编写一些event loop。在这种情况下,您可能想要类似poll(2)select(2)之类的东西,或者想要使用与以下内容相关联的条件变量(请阅读有关pthread_cond_init的{​​{3}}等)互斥体。

线程是昂贵的资源(因为每个线程都需要一个Pthread tutorial,通常至少为一个兆字节)。您应该宁愿拥有一个或几个事件循环,而不要拥有数千个线程。

如果您正在为Linux进行编码,请另外阅读call stackAdvanced Linux Programmingsyscalls(2)