一个条件变量,多个互斥锁

时间:2017-09-28 05:21:17

标签: multithreading operating-system mutex condition-variable

我在看Operating system course part 2 lecture 2 video 17。在本讲座中,她提到条件变量的数据结构包含互斥引用等待线程列表

我想知道是否可以在不同的互斥锁中使用相同的条件?

例如:我有2个等待语句

  1. 等待(mutex1,condition_A)
  2. wait(mutex2,condition_A)//条件在两者中都相同
  3. 如果上述问题的答案是肯定的,那么这两个语句会创建两个条件变量还是一个?注意:讲座只提到了一个互斥引用。

1 个答案:

答案 0 :(得分:0)

我想这取决于实施。

POSIX说:

  

当一个线程等待一个条件变量时,指定了一个   特别是互斥pthread_cond_timedwait()或。{   pthread_cond_wait()操作,之间形成动态绑定   只要at处于有效状态的互斥和条件变量   条件变量上至少阻塞了一个线程。在这   时间,任何线程尝试等待该条件的效果   使用不同互斥锁的变量是未定义的。一切都等了   线程已被解除阻塞(如pthread_cond_broadcast()   操作),该条件变量的下一个等待操作应该   与该等待指定的互斥锁形成新的动态绑定   操作

因此,您可以使用不同的互斥锁,但不能同时使用相同的条件变量。

关于C ++,cppreference.com说:

  

如果lock.mutex()与该虚拟引擎不同,则调用此函数   由当前正在等待的所有其他线程使用   条件变量是未定义的行为。

因此它似乎与POSIX条件变量具有相同的要求。