如何在某个时间(以毫秒为单位)睡眠posix pthread?哪种方法最适合:使用usleep函数或pthread_cond_timedwait。
答案 0 :(得分:6)
你住在酒店。你想在几个小时后醒来。如果您想在早上自己使用游泳池,您希望酒店经理只有在有重要事项(来自pthread_cond_wait
的虚假唤醒)或者酒店游泳池是您的时候才会醒来(互斥体有被锁定了。
但是如果你只是想在几个小时后醒来,你就设置了闹钟,当你醒来时,你会检查闹钟是否已经关闭,或者你可以再喝一小时。您不关心其他资源,只关注时间是否过去。你只需nanosleep()
。
如果您只想睡觉,请使用usleep
或nanosleep
进行睡眠。 pthread_cond_wait
有一个开销,因为它在返回时会锁定互斥锁。如果该互斥锁在一段时间内不可用,那么如果另一个线程出现问题或死锁,那么您将比原先想要的时间更长,甚至永远停留。
话虽这么说,如果你等待受互斥锁保护的资源并想在线程唤醒后立即获取互斥锁,你应该使用一个条件变量。
如果您使用C ++ 11,请尝试std::this_thread::sleep_for
。但是,不要将C ++ 11线程数据结构(线程,互斥,条件变量)与POSIX的混合使用。