我试着去理解在我发出一个condvar信号后我有什么保证。
基本的使用模式是,我相信,这个(伪代码):
用户线程:

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

生产线程:
Mutex.Enter()
  variable = ready
  Condvar.Broadcast()
  [Unknown?]
Mutext.Exit()

我的问题是。关于上面代码中的[未知]点,我有什么保证?我仍然持有互斥锁,但是我能知道消费者的状态吗?
从手册页上看,我不清楚制作者在广播/信号后和释放互斥之前处于什么状态。

最佳答案

condition vars
pthread_cond_wait()阻塞调用线程,直到发出指定条件的信号。当互斥锁被锁定时,应该调用这个例程,它将在等待时自动释放互斥锁。在接收到信号并唤醒线程后,互斥锁将自动锁定供线程使用。然后,程序员负责在线程完成时解锁互斥锁。
因此,当producer执行未知的代码段时,producer持有互斥锁,而使用者锁定互斥锁,直到producer释放互斥锁为止。

关于linux - 信号之后但互斥锁释放之前的转换行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26557876/

10-14 13:22