假设我有一个列表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/