提问人:Steveng 提问时间:9/3/2010 最后编辑:lucian.pantelimonSteveng 更新时间:11/13/2022 访问量:101584
pthread 睡眠 linux
pthread sleep linux
答:
只是线程。sleep() 的 POSIX 文档说:
该函数将导致调用线程暂停执行...
sleep()
评论
sleep(3)
我通常使用nanosleep,它工作正常。 Nanosleep 会取代调用线程的执行。我也有同样的疑问,因为在某些手册页中,睡眠指的是整个过程。
试试这个,
#include <unistd.h>
usleep(microseconds);
评论
nanosleep
sleep()
函数不会停止特定线程,但它会在指定的时间内停止整个进程。为了停止特定线程的执行,我们可以使用一个 pthread 条件对象并使用函数使线程等待特定时间。每个线程都有自己的条件对象,它永远不会收到来自任何其他线程的信号。pthread_cond_timedwait()
评论
sleep()
sleep(3)
在实践中,很少有情况下您只想睡一小段延迟(毫秒)。对于 Linux,请阅读 time(7),并查看此答案。对于超过一秒的延迟,请参见 sleep(3),对于较小的延迟,请参见 nanosleep(2)。(一个反例可能是运行一些嵌入式Linux并驱动机器人的RasPerryPi;在这种情况下,你可能确实每十分之一秒从某个硬件设备读取一次)。当然,休眠只是一个内核调度的任务(所以是一个进程或线程)。
您可能希望编写一些事件循环代码。在这种情况下,您可能想要像 poll(2) 或 select(2) 这样的东西,或者您想要使用与互斥锁相关的条件变量(阅读 Pthread 教程等)。pthread_cond_init
线程是昂贵的资源(因为每个线程都需要一个调用堆栈,通常至少需要一兆字节)。您应该更喜欢有一个或几个事件循环,而不是有数千个线程。
如果您正在为 Linux 编写代码,请阅读 Advanced Linux Programming and syscalls(2) 和 pthreads(7)。
Posix 休眠函数不是线程安全的。https://clang.llvm.org/extra/clang-tidy/checks/concurrency/mt-unsafe.html
评论