【问题标题】:What happens when pthread_cond_broadcast is called and multiple threads are awoken only to compete for the same mutex?当调用 pthread_cond_broadcast 并唤醒多个线程只是为了竞争同一个互斥体时会发生什么?
【发布时间】:2021-02-16 10:53:24
【问题描述】:

当您调用pthread_cond_broadcast() 并且多个线程唤醒只是为了争夺同一个互斥锁时会发生什么。其中一个线程获得了互斥锁,但其他线程会发生什么?他们回去睡觉了吗?或者它们会一直旋转直到锁再次可用?

【问题讨论】:

    标签: c linux pthreads condition-variable


    【解决方案1】:

    当您拨打pthread_cond_broadcast() 和多个电话时会发生什么 线程唤醒只是为了争夺同一个互斥锁。中的一个 线程获取互斥锁,但其他线程会发生什么?做 他们回去睡觉了吗?或者他们会旋转直到锁可用 再来一次?

    当您调用pthread_cond_broadcast() 时,所有等待指定条件变量的线程都会停止这样做。所有此类线程都将传递(指向)相同互斥锁到pthread_cond_wait(),否则行为未定义。在从pthread_cond_wait() 成功返回之前,每个未阻塞的线程都将(重新)获取该互斥锁。这可能需要它们中的一些甚至全部阻塞,就好像它们在任何其他情况下都在争夺同一个互斥锁一样。它们不会旋转,也不需要与 CV 进行任何进一步的交互来恢复它们,但是当它从 pthread_cond_wait() 返回时,每个都将保持互斥锁锁定,就像它调用该函数时所做的那样。

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多