【问题标题】:One condition variable, multiple mutexes一个条件变量,多个互斥锁
【发布时间】:2018-03-09 17:55:04
【问题描述】:

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

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

例如:我有 2 个等待语句

  1. 等待(mutex1, condition_A)
  2. wait(mutex2, condition_A) //条件相同

如果上述问题的答案是肯定的,那么这两条语句会创建两个条件变量还是一个?注意:讲座只提到了一个互斥量引用。

【问题讨论】:

    标签: multithreading operating-system mutex condition-variable


    【解决方案1】:

    我猜这取决于实现。

    POSIX 说:

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

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

    关于 C++,cppreference.com 说:

    如果lock.mutex() 不是同一个互斥锁,则调用此函数 当前正在等待相同的所有其他线程使用 条件变量是未定义的行为。

    所以它似乎和POSIX条件变量有同样的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 2023-03-10
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多