假设我有一个列表List,而我有pthread_t t1从列表中轮询,而我还有许多其他pthread可以将元素插入列表中。
该列表已用锁listLock锁定。
t1拥有锁时-如果列表为空,他将与pthread_cond_wait(..)一起睡觉,并且当线程插入列表时,他会向他发出信号。

我的问题是:如果t1处于等待状态,并且有很多线程卡在其中
pthread_mutex_lock(&listLock),当锁将被解锁时,t1是否将优先获得该锁,或者他会与其他线程“战斗”以获得该锁?

谢谢

最佳答案

它会战斗,但这是公平的战斗。所有呼叫者根据他们呼叫等待的顺序进入队列。这是完全确定性的。

但是,考虑到您使用事物的方式,您可能需要考虑使用读/写锁。它允许N个并发读取器,但是任何时候尝试写入时,它将锁定所有人,直到完成。

关于c - 获得pthread锁的优先级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5568989/

10-11 22:59
查看更多