我在看Operating system course part 2 lecture 2 video 17。在本讲座中,她提到条件变量的数据结构包含互斥引用和等待线程列表。
我想知道是否可以在不同的互斥锁中使用相同的条件?
例如:我有2个等待语句
如果上述问题的答案是肯定的,那么这两个语句会创建两个条件变量还是一个?注意:讲座只提到了一个互斥引用。
答案 0 :(得分:0)
我想这取决于实施。
POSIX说:
当一个线程等待一个条件变量时,指定了一个 特别是互斥
pthread_cond_timedwait()
或。{pthread_cond_wait()
操作,之间形成动态绑定 只要at处于有效状态的互斥和条件变量 条件变量上至少阻塞了一个线程。在这 时间,任何线程尝试等待该条件的效果 使用不同互斥锁的变量是未定义的。一切都等了 线程已被解除阻塞(如pthread_cond_broadcast()
操作),该条件变量的下一个等待操作应该 与该等待指定的互斥锁形成新的动态绑定 操作
因此,您可以使用不同的互斥锁,但不能同时使用相同的条件变量。
关于C ++,cppreference.com说:
如果
lock.mutex()
与该虚拟引擎不同,则调用此函数 由当前正在等待的所有其他线程使用 条件变量是未定义的行为。
因此它似乎与POSIX条件变量具有相同的要求。