我有一个类打开事务,向队列添加操作,然后关闭事务。在open-gt; close生命周期中,我想使用递归互斥锁,这样只有一个线程可以随时打开一个事务。所有其他线程都被阻塞,直到当前事务结束。
class MyObject
{
void beginTransaction()
{
// acquire mutex
}
void endTransaction()
{
// release mutex
}
boost::recursive_mutex m_mutex;
}
在这种情况下,我很难确定如何使用recursive_mutex
,因为锁存在的时间比单个方法的范围更长。任何人都可以建议我如何在这里应用锁定?
答案 0 :(得分:1)
Boost(和标准库)提供互斥锁(可以锁定和解锁)和锁定,它可以锁定构造函数中的互斥锁并在析构函数中解锁它们。锁实际上只是轻量级包装器,用于确保在离开范围时释放锁。
在您的情况下,您只需直接使用互斥锁,而无需将其包装在锁中。
您可以拨打m_mutex.lock()
中的beginTransaction
来锁定互斥锁,然后m_mutex.unlock()
中的endTransaction
来解锁互斥锁。如果另一个线程试图在两次调用之间调用m_mutex.lock()
,它将一直阻塞,直到endTransaction