如果我们在它之前放置一个互斥锁,那么多个线程如何在条件变量上等待?

时间:2012-03-01 05:52:03

标签: multithreading thread-safety pthreads mutex race-condition

pthread_cond_broadcast用于唤醒等待条件变量的多个线程。但是,与此同时,我们也应该在条件变量之前放置一个互斥锁,以避免竞争条件。

因此,如果有一个互斥锁,并且一个线程已经拥有它并因此等待变量,那么任何其他线程如何保持相同的互斥锁(进入等待部分)?

1 个答案:

答案 0 :(得分:3)

当一个线程调用pthread_cond_wait()时,它需要保存相关的互斥锁。 API会在阻塞线程时释放互斥锁。一旦API决定需要释放线程,它就会在从API返回之前获取互斥锁。

需要保持互斥锁,因为检查条件然后调用pthread_cond_wait()不是原子操作。互斥(以及互斥锁的正确使用)可防止线程在检查和调用等待之间的短时间内错过条件。

但是对特定问题(另一个线程如何获得互斥锁)的简短回答是,当线程在pthread_cond_wait()中被阻塞时,互斥锁不会被保留。