Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ pthread睡眠linux_C++_Multithreading_Pthreads - Fatal编程技术网

C++ pthread睡眠linux

C++ pthread睡眠linux,c++,multithreading,pthreads,C++,Multithreading,Pthreads,我正在使用pthreads创建一个包含多个线程的程序 是sleep()导致进程(所有线程)停止执行,还是仅导致调用sleep的线程停止执行 只是线。报告说: sleep()函数将导致调用线程被暂停执行 我通常使用它,效果很好。 Nanosleep支持调用线程的执行。我也有同样的疑问,因为在一些手册页中,睡眠指的是整个过程。试试这个 #include <unistd.h> usleep(microseconds); #包括 usleep(微秒); sleep()函数不会停止特定线程

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

sleep()
导致进程(所有线程)停止执行,还是仅导致调用
sleep
的线程停止执行

只是线。报告说:

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

我通常使用它,效果很好。 Nanosleep支持调用线程的执行。我也有同样的疑问,因为在一些手册页中,睡眠指的是整个过程。

试试这个

#include <unistd.h>

usleep(microseconds);
#包括
usleep(微秒);

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

实际上,很少有情况下您只想睡眠一个小延迟(毫秒)。对于Linux,请阅读,另请参阅。有关超过一秒的延迟,请参见,有关小延迟,请参见。(一个反例可能是运行一些嵌入式Linux并驱动一个机器人;在这种情况下,您可能确实每十分之一秒读取一次某个硬件设备的数据)。当然,休眠只是一个单独的内核调度任务(进程或线程)

您可能需要编写一些代码。在这种情况下,您可能需要类似或的内容,或者希望使用与互斥量关联的条件变量(阅读about
pthread\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)
。许多较旧的手册页仍然使用“进程”一词,但实际上线程就是一个进程。轻量级进程==线程。