C++ 如何使用boost实现递归锁,它跨越了多个方法?
我有一个类,它打开事务,向队列添加操作,然后关闭事务。在open->close的整个生命周期中,我希望使用一个递归互斥体,这样在任何时候只有一个线程可以打开一个事务。所有其他线程将被阻止,直到当前事务结束C++ 如何使用boost实现递归锁,它跨越了多个方法?,c++,boost,recursive-mutex,C++,Boost,Recursive Mutex,我有一个类,它打开事务,向队列添加操作,然后关闭事务。在open->close的整个生命周期中,我希望使用一个递归互斥体,这样在任何时候只有一个线程可以打开一个事务。所有其他线程将被阻止,直到当前事务结束 class MyObject { void beginTransaction() { // acquire mutex } void endTransaction() { // release mutex } boost::recursive_m
class MyObject
{
void beginTransaction()
{
// acquire mutex
}
void endTransaction()
{
// release mutex
}
boost::recursive_mutex m_mutex;
}
在这种情况下,我很难确定如何使用递归互斥锁,因为锁的存在时间会超过单个方法的范围。有人能建议我如何在这里应用锁吗?Boost(和标准库)提供了互斥锁,可以锁定和解锁,以及锁,可以在构造函数中锁定互斥锁,在析构函数中解锁互斥锁。锁实际上只是轻量级包装器,用于确保在离开作用域时释放锁
在您的情况下,您只需直接使用互斥体,而无需将其包装在锁中
您可以在beginTransaction
中调用m_mutex.lock()
来锁定互斥体,然后在endTransaction
中调用m_mutex.unlock()
来解锁互斥体。如果另一个线程试图在两次调用之间调用m_mutex.lock()
,它将阻塞,直到所属线程在endTransaction