gpt4 book ai didi

pthreads - pthread_cond_wait 和互斥锁要求

转载 作者:行者123 更新时间:2023-12-03 13:55:23 27 4
gpt4 key购买 nike

为什么在调用 pthread_cond_wait 之前需要锁定互斥锁?

此外,在调用 pthread_cond_signal 之前是否需要锁定(在同一个互斥体上)? ?

谢谢你的帮助。

最佳答案

Why it is required to lock a mutex before calling pthread_cond_wait?



因为否则会有一个不可避免的竞争条件。

互斥锁保护共享状态。条件变量与状态的某个谓词(“条件”)相关联。基本思想是您想要:

1)检查谓词

2)如果谓词为假,则进入休眠状态,直到它变为真

在并发系统中,某些线程总是有可能使 (1) 和 (2) 之间的谓词为真。为了避免这种竞争,您必须在 (1) 之前持有一个互斥锁,并且必须在执行 (2) 时原子地释放它。

例如,对于队列,谓词可能是“队列不为空”。但是在您检查队列是否为非空的时间和您进入休眠的时间之间,其他一些线程可能会向队列中添加一些东西。

因此,您必须在检查谓词和调用 pthread_cond_wait 时都持有互斥锁。

Also, is it required to take a lock (on the same mutex) before calling pthread_cond_signal?



据我所知,这没有根本问题。它只是引入了潜在的低效率。

同样,您正在修改的任何共享状态(从而使谓词为真)都必须受到互斥锁的保护。因此,任何时候您想要发出条件信号,您都必须已经持有互斥锁。

如果在发出条件信号之前释放互斥锁,则谓词可能会由于其他线程的操作而在两者之间变为假。这场比赛不会导致失败,因为任何等待条件的线程都必须在继续之前仔细检查谓词......但是为什么要让它遇到麻烦呢?

底线:只需按照说明进行操作,您甚至不必考虑这些问题。 :-)

关于pthreads - pthread_cond_wait 和互斥锁要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6312342/

27 4 0