我有一个类,它打开事务,将操作添加到队列,然后关闭事务。在打开->关闭生命周期中,我想使用递归互斥体,以便任何时候只有一个线程可以打开事务。所有其他线程都将被阻塞,直到当前事务结束。
class MyObject
{
void beginTransaction()
{
// acquire mutex
}
void endTransaction()
{
// release mutex
}
boost::recursive_mutex m_mutex;
}
在这种情况下,我很难确定如何使用recursive_mutex
,因为锁的存在时间比单个方法的范围要长。谁能建议我如何在这里应用锁定?
最佳答案
Boost(和标准库)提供可以锁定和解锁的互斥体,以及在构造函数中锁定互斥体并在析构函数中解锁它们的锁。锁实际上只是轻量级包装器,用于确保在离开作用域时释放锁。
在您的情况下,您只需直接使用互斥锁,而不将其包装在锁中。
您可以在 beginTransaction
中调用 m_mutex.lock()
来锁定互斥体,然后在 endTransaction 中调用
解锁互斥体。如果另一个线程尝试在调用之间调用 m_mutex.unlock()
m_mutex.lock()
,它将阻塞,直到互斥体在 endTransaction
关于c++ - 如何使用 boost 实现跨多个方法的递归锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306715/