我试图了解在发出condvar信号后我刚才有什么保证。
我相信基本的使用模式是(伪代码):
消费者话题:
Mutex.Enter()
while(variable != ready)
Condvar.Wait()
Mutex.Exit()
制作人主题:
Mutex.Enter()
variable = ready
Condvar.Broadcast()
[Unknown?]
Mutext.Exit()
我的问题是。我对上面代码中的[未知]点有什么保证?我仍然持有互斥锁,但我能了解消费者的状态吗?
在Man页面中,我不清楚生产者在广播/信号之后以及在发布互斥锁之前处于什么状态。
答案 0 :(得分:0)
pthread_cond_wait()阻塞调用线程,直到发出指定的条件。应该在锁定互斥锁时调用此例程,并在等待时自动释放互斥锁。收到信号并唤醒线程后,互斥锁将自动锁定以供线程使用。然后程序员负责在线程完成时解锁互斥锁。
因此,当生产者执行代码的未知部分时,生产者持有互斥锁,并且消费者被锁定在互斥锁上,直到生产者释放它。