boost相当于windows互斥锁

boost equivalent to windows mutex

本文关键字:windows 相当于 boost      更新时间:2023-10-16

在Mac OS上的boost land中,以下代码将自身死锁:

boost::mutex m;
m.lock();
m.lock();

也是如此

boost::mutex m;
boost::mutex::scoped_lock lock(m);
boost::mutex::scoped_lock lock(m);

在Windows环境中,只要释放次数相同,同一个线程就可以随心所欲地获得Win32互斥。我需要一个提升同步对象的确切行为。

您需要的是一个boost::recursive_mutex:

recursive_mutex类使用递归锁定策略,因此尝试递归锁定recursive_mutex对象成功,并保持内部"锁计数"。没有锁的线程尝试解锁recursive_mutex对象会导致未定义的行为。


请注意,boost::mutex:

互斥对象类使用Unspecified锁定策略,因此尝试递归地锁定互斥对象或由没有锁定的线程尝试解锁互斥对象会导致未定义的行为。这种策略允许在任何给定的平台上尽可能高效地实现。


在计算机科学中,递归互斥被称为Reentrant互斥:

在计算机科学中,可重入互斥是一种互斥的递归锁机制。在可重入互斥体中,同一线程可以多次获取锁。但是,锁必须释放相同次数,否则其他线程将无法获取锁

尝试使用递归互斥:由于boost::互斥不是递归的,我们需要使用其递归版本boost::recursive_mutex