如何在某个时间睡觉,以毫秒为单位,posix pthread
How to sleep at some time, in milliseconds, the posix pthread?
如何在某个时间睡觉,以毫秒为单位,posix pthread? 哪种方法最适合:使用 usleep 函数或pthread_cond_timedwait。
一个小故事
你住在酒店里。您想在几个小时后醒来。如果你想在早上独自使用游泳池,你希望酒店经理只有在有重要的事情(从pthread_cond_wait
中虚假醒来)或酒店游泳池是你的(互斥锁已被锁定)时才醒来。
但是,如果您只想在几个小时后醒来,您可以设置闹钟,当您醒来时,您可以检查闹钟是否响起,或者您可以再喝一个小时。你不关心其他资源,只关心时间是否过去。你只是nanosleep()
.
等等,什么?
如果您只是想睡觉,请使用 usleep
或 nanosleep
睡觉。 pthread_cond_wait
有一个开销,因为它在返回时会锁定互斥锁。如果该互斥锁在一段时间内不可用,您将比最初想要的睡眠时间更长,甚至永远,如果另一个线程出现问题或死锁。
话虽如此,如果您等待受互斥锁保护的资源并希望在线程唤醒后立即获取互斥锁,则应使用条件变量。
C++11
如果您使用 C++11,请尝试std::this_thread::sleep_for
。但是,不要将 C++11 线程数据结构(线程、互斥锁、条件变量)与 POSIX 的数据结构混合使用。
相关文章:
- 以天C++为单位的两个时间戳之间的差异
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 从原始字节解码协议缓冲区(以 C++为单位)
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 编写以 C++ 为单位返回值的函数
- 以C++为单位进行运行长度编码
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- arr[n] 是否以 C++ 为单位打印数组的长度?
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 以 C++ 为单位具有输出限制的排列
- 以 GDB 为单位指定浮点精度
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 如何在没有硬编码的情况下以C++为单位获取类数组的长度?
- 指针引用的生存期(以 C++为单位)
- 以字符为单位设置控制台大小
- 获取嵌套 stl 容器的大小(以字节为单位)
- 有没有一种 STL 方法可以找到字符串的所有排列,给出一个以 C++ 为单位的大小?
- 二进制数组中最大连续 1 的起始和结束索引,以 C++ 为单位
- 正向声明的枚举,默认值以.h为单位
- 如何在某个时间睡觉,以毫秒为单位,posix pthread