信号之后的Condvar行为,但在互斥体释放之前

时间:2014-10-24 23:52:21

标签: linux synchronization mutex

我试图了解在发出condvar信号后我刚才有什么保证。

我相信基本的使用模式是(伪代码):

消费者话题:

Mutex.Enter()
  while(variable != ready)
     Condvar.Wait()
Mutex.Exit()

制作人主题:

Mutex.Enter()
  variable = ready
  Condvar.Broadcast()
  [Unknown?]
Mutext.Exit()

我的问题是。我对上面代码中的[未知]点有什么保证?我仍然持有互斥锁,但我能了解消费者的状态吗?

在Man页面中,我不清楚生产者在广播/信号之后以及在发布互斥锁之前处于什么状态。

1 个答案:

答案 0 :(得分:0)

来自condition vars

pthread_cond_wait()阻塞调用线程,直到发出指定的条件。应该在锁定互斥锁时调用此例程,并在等待时自动释放互斥锁。收到信号并唤醒线程后,互斥锁将自动锁定以供线程使用。然后程序员负责在线程完成时解锁互斥锁。

因此,当生产者执行代码的未知部分时,生产者持有互斥锁,并且消费者被锁定在互斥锁上,直到生产者释放它。