Mutex可以分为递归锁(recursive mutex)和非递归锁(non-recursive mutex)。可递归锁也可称为可重入锁(reentrant mutex),
非递归锁又叫不可重入锁(non-reentrant mutex)。
二者唯一的区别是,同一个线程可以多次获取同一个递归锁,不会产生死锁。而如果一个线程多次获取同一个非递归锁,则会产生死锁。
boost::recursive_mutex
实现了 the Lockable
concept ,提供一个递归式的互斥量 。对于一个实例最多允许一个线程拥有其锁定 。支持函数lock()
,try_lock()
和 unlock()
并发调用。如果一个线程已经锁定一个boost::recursive_mutex
实例, 那么这个线程可以多次通过lock()
或 try_lock()
锁定这个实例,针对每一次成功的锁定动作,需要调用unlock()
来接触锁定。