【发布时间】:2013-07-12 03:24:01
【问题描述】:
不确定这个问题之前是否被问过,但它如何(或是否)保证pthread_cond_wait 在pthread_cond_signal/broadcast 之前执行?
如果在随后的pthread_cond_signal 被调用之后一个线程调用pthread_cond_wait 会发生什么?
信号会丢失吗?
如果pthread_cond_signal 是一个阻塞调用(从描述“至少一个线程被唤醒”中听上去像是这样),那么处于阻塞状态的互斥体会发生什么情况?谢谢您的帮助!
【问题讨论】:
-
另外,pthread_cond_broadcast 是如何执行的?调用线程是否被阻塞,直到所有等待该条件的线程都被唤醒?
-
没有。
pthread_cond_signal和pthread_cond_broadcast都不会阻止他们的来电者。 -
另一个问题,那么调用 pthread_cond_signal 会立即唤醒等待的线程吗?等待函数的描述说,当等待函数返回时,互斥锁再次归等待线程所有。那么现在信号线程不是同时拥有互斥锁吗?
-
pthread_cond_wait在重新获取互斥体之前无法返回。如果信令线程在发信号时持有互斥锁,那么它可以通过释放互斥锁来控制服务员何时能够“唤醒”。如果它在发出信号之前已经释放了互斥锁,那么它就无法控制服务员的唤醒;只要没有其他线程占用互斥锁,服务员就可以在信号发出后立即唤醒。 -
太棒了!这解释了很多。谢谢你的帮助。欣赏它。