如何在某个时间睡觉,以毫秒为单位,posix pthread

How to sleep at some time, in milliseconds, the posix pthread?

本文关键字:为单位 pthread posix 时间      更新时间:2023-10-16

如何在某个时间睡觉,以毫秒为单位,posix pthread? 哪种方法最适合:使用 usleep 函数或pthread_cond_timedwait。

一个小故事

你住在酒店里。您想在几个小时后醒来。如果你想在早上独自使用游泳池,你希望酒店经理只有在有重要的事情(从pthread_cond_wait中虚假醒来)或酒店游泳池是你的(互斥锁已被锁定)时才醒来。

但是,如果您只想在几个小时后醒来,您可以设置闹钟,当您醒来时,您可以检查闹钟是否响起,或者您可以再喝一个小时。你不关心其他资源,只关心时间是否过去。你只是nanosleep().

等等,什么?

如果您只是想睡觉,请使用 usleepnanosleep 睡觉。 pthread_cond_wait有一个开销,因为它在返回时会锁定互斥锁。如果该互斥锁在一段时间内不可用,您将比最初想要的睡眠时间更长,甚至永远,如果另一个线程出现问题或死锁。

话虽如此,如果您等待受互斥锁保护的资源并希望在线程唤醒后立即获取互斥锁,则应使用条件变量。

C++11

如果您使用 C++11,请尝试std::this_thread::sleep_for 。但是,不要将 C++11 线程数据结构(线程、互斥锁、条件变量)与 POSIX 的数据结构混合使用。