boost :: unique_locks是按照它们被调用的顺序授予的吗?

时间:2014-07-13 19:24:35

标签: boost locking queue boost-mutex contention

我已经检查了Boost Synchronization上的文档,而我似乎无法确定boost::unique_lock是否会按顺序获得锁定。

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

1 个答案:

答案 0 :(得分:1)

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

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

作为一个有趣的例子,条件变量只保留调度顺序 ,如果您注意在互斥锁下发出信号(如果不这样做,除非您的调度关键取决于公平调度,否则事情通常会有效) ):

  

man phtread_cond_signal

     

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