我正在使用pthreads创建一个包含多个线程的程序。
是sleep()
导致进程(所有线程)停止执行还是只调用我调用sleep
的线程?
答案 0 :(得分:33)
答案 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 stack和Advanced Linux Programming和syscalls(2)。