1

我检查了有关Boost Synchronization的文档,但我似乎无法确定 a 是否boost::unique_lock会按顺序获得其锁定。

换句话说,如果两个线程竞争锁定一个已经被锁定的互斥体,那么在释放锁之后它们尝试锁定的顺序是否会保持?

4

1 回答 1

1

唯一锁不是锁(它是可以作用于任何 Lockable 或 TimedLockable 类型的锁适配器,请参阅cppreference)。

线程获得锁(或一般的资源)的顺序可能是实现定义的。这些实现通常具有详细记录的调度语义,因此应用程序可以避免资源匮乏、软锁和死锁。

作为一个有趣的例子,条件变量在您注意在互斥锁下发出信号时才保留调度顺序(如果您不这样做,除非您的调度严重依赖于公平调度,否则事情通常会起作用):

男人phtread_cond_signal

pthread_cond_broadcast()orpthread_cond_signal()函数可以被线程调用,无论它当前是否拥有线程调用的互斥锁或pthread_cond_wait()pthread_cond_timedwait()等待期间与条件变量关联的互斥锁;但是,如果需要可预测的调度行为,则该互斥体应由调用pthread_cond_broadcast()或的线程锁定pthread_cond_signal()

于 2014-07-13T22:48:59.800 回答