如何在一段时间内以毫秒为单位睡眠posix pthread?

时间:2013-10-29 06:30:01

标签: c++ linux pthreads sleep

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

1 个答案:

答案 0 :(得分:6)

一个小故事

你住在酒店。你想在几个小时后醒来。如果您想在早上自己使用游泳池,您希望酒店经理只有在有重要事项(来自pthread_cond_wait的虚假唤醒)或者酒店游泳池是您的时候才会醒来(互斥体有被锁定了。

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

等等,什么?

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

话虽这么说,如果你等待受互斥锁保护的资源并想在线程唤醒后立即获取互斥锁,你应该使用一个条件变量。

C ++ 11

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