【发布时间】:2021-02-16 10:53:24
【问题描述】:
当您调用pthread_cond_broadcast() 并且多个线程唤醒只是为了争夺同一个互斥锁时会发生什么。其中一个线程获得了互斥锁,但其他线程会发生什么?他们回去睡觉了吗?或者它们会一直旋转直到锁再次可用?
【问题讨论】:
标签: c linux pthreads condition-variable
当您调用pthread_cond_broadcast() 并且多个线程唤醒只是为了争夺同一个互斥锁时会发生什么。其中一个线程获得了互斥锁,但其他线程会发生什么?他们回去睡觉了吗?或者它们会一直旋转直到锁再次可用?
【问题讨论】:
标签: c linux pthreads condition-variable
当您拨打
pthread_cond_broadcast()和多个电话时会发生什么 线程唤醒只是为了争夺同一个互斥锁。中的一个 线程获取互斥锁,但其他线程会发生什么?做 他们回去睡觉了吗?或者他们会旋转直到锁可用 再来一次?
当您调用pthread_cond_broadcast() 时,所有等待指定条件变量的线程都会停止这样做。所有此类线程都将传递(指向)相同互斥锁到pthread_cond_wait(),否则行为未定义。在从pthread_cond_wait() 成功返回之前,每个未阻塞的线程都将(重新)获取该互斥锁。这可能需要它们中的一些甚至全部阻塞,就好像它们在任何其他情况下都在争夺同一个互斥锁一样。它们不会旋转,也不需要与 CV 进行任何进一步的交互来恢复它们,但是当它从 pthread_cond_wait() 返回时,每个都将保持互斥锁锁定,就像它调用该函数时所做的那样。
【讨论】: