c++ - 如何使用 boost 实现跨多个方法的递归锁?

标签 c++ boost recursive-mutex

我有一个类,它打开事务,将操作添加到队列,然后关闭事务。在打开->关闭生命周期中,我想使用递归互斥体,以便任何时候只有一个线程可以打开事务。所有其他线程都将被阻塞,直到当前事务结束。

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/

相关文章:

boost::numeric::odeint 对于刚性系统,如果我们无法获得解析雅可比矩阵怎么办?

c++ - 如何有效使用Boost的intrusive_ptr?

c++ - 并发对象池提供 boost::shared_ptr

c++ - 非递归互斥所有权

c++ - 将 unique_lock<recursive_mutex> 移动到另一个线程

c++ - 是否可以动态检查文本字符串是否是 C++ 中给定类的成员?

c++ - C++ 服务器上的线程同步

C++ 外部文件读取 : I know how to find and read a string, findMe.但是我如何处理 findMei(查找字符串中的任意数字 i)?

c++ - std::mutex 与 std::recursive_mutex 作为类成员

c++ - 将 Const Char 附加到 Char* C++