C++ pthread睡眠linux
我正在使用pthreads创建一个包含多个线程的程序 是C++ pthread睡眠linux,c++,multithreading,pthreads,C++,Multithreading,Pthreads,我正在使用pthreads创建一个包含多个线程的程序 是sleep()导致进程(所有线程)停止执行,还是仅导致调用sleep的线程停止执行 只是线。报告说: sleep()函数将导致调用线程被暂停执行 我通常使用它,效果很好。 Nanosleep支持调用线程的执行。我也有同样的疑问,因为在一些手册页中,睡眠指的是整个过程。试试这个 #include <unistd.h> usleep(microseconds); #包括 usleep(微秒); sleep()函数不会停止特定线程
sleep()
导致进程(所有线程)停止执行,还是仅导致调用sleep
的线程停止执行 只是线。报告说:
sleep()
函数将导致调用线程被暂停执行
我通常使用它,效果很好。
Nanosleep支持调用线程的执行。我也有同样的疑问,因为在一些手册页中,睡眠指的是整个过程。试试这个
#include <unistd.h>
usleep(microseconds);
#包括
usleep(微秒);
sleep()
函数不会停止特定线程,但会在指定的时间内停止整个进程。为了停止特定线程的执行,我们可以使用一个pthread condition对象,并使用pthread\u cond\u timedwait()
函数使线程等待特定的时间。每个线程都有自己的条件对象,它永远不会从任何其他线程接收信号。实际上,很少有情况下您只想睡眠一个小延迟(毫秒)。对于Linux,请阅读,另请参阅。有关超过一秒的延迟,请参见,有关小延迟,请参见。(一个反例可能是运行一些嵌入式Linux并驱动一个机器人;在这种情况下,您可能确实每十分之一秒读取一次某个硬件设备的数据)。当然,休眠只是一个单独的内核调度任务(进程或线程)
您可能需要编写一些代码。在这种情况下,您可能需要类似或的内容,或者希望使用与互斥量关联的条件变量(阅读aboutpthread\u cond\u init
等)
线程是昂贵的资源(因为每个线程都需要一个内存,通常至少需要一兆字节)。您应该更喜欢一个或几个事件循环,而不是数千个线程
如果您是为Linux编写代码,请阅读和。以下是“man 3 sleep”中的内容:“sleep()使调用进程睡眠到几秒钟……”(Ubuntu 10)。该函数与td.h一致。此文档是否错误,或者是否存在第二个睡眠功能?@user48956:出于历史原因,手册页通常使用“进程”,此时行为将应用于“线程”-您所指的
sleep(3)
手册页就是这种情况。我建议向Ubuntu提交一个关于文档的bug。是的,在大多数情况下,这比nanosleep
更容易使用。请注意,usleep()已经过时,并且已从POSIX.1-2008中删除。如果需要更高的分辨率,则应使用sleep()或nanosleep()。这是不准确的。sleep()
将导致当前线程休眠。请参见睡眠(3)
。许多较旧的手册页仍然使用“进程”一词,但实际上线程就是一个进程。轻量级进程==线程。