我检查了有关Boost Synchronization的文档,但我似乎无法确定 a 是否boost::unique_lock
会按顺序获得其锁定。
换句话说,如果两个线程竞争锁定一个已经被锁定的互斥体,那么在释放锁之后它们尝试锁定的顺序是否会保持?
我检查了有关Boost Synchronization的文档,但我似乎无法确定 a 是否boost::unique_lock
会按顺序获得其锁定。
换句话说,如果两个线程竞争锁定一个已经被锁定的互斥体,那么在释放锁之后它们尝试锁定的顺序是否会保持?
唯一锁不是锁(它是可以作用于任何 Lockable 或 TimedLockable 类型的锁适配器,请参阅cppreference)。
线程获得锁(或一般的资源)的顺序可能是实现定义的。这些实现通常具有详细记录的调度语义,因此应用程序可以避免资源匮乏、软锁和死锁。
作为一个有趣的例子,条件变量仅在您注意在互斥锁下发出信号时才保留调度顺序(如果您不这样做,除非您的调度严重依赖于公平调度,否则事情通常会起作用):
pthread_cond_broadcast()
orpthread_cond_signal()
函数可以被线程调用,无论它当前是否拥有线程调用的互斥锁或pthread_cond_wait()
在pthread_cond_timedwait()
等待期间与条件变量关联的互斥锁;但是,如果需要可预测的调度行为,则该互斥体应由调用pthread_cond_broadcast()
或的线程锁定pthread_cond_signal()
。