这段代码无法编译:
class MyClass
{
boost::mutex _mutex;
void foo() const
{
boost::mutex::scoped_lock lock(_mutex);
//critical section
}
}
但是将函数定义为非 const 可以正常工作。 拜托,有人可以解释为什么吗? 谢谢!
最佳答案
您不能在 const 成员函数内锁定互斥量,因为这实际上会修改互斥量的内部状态(lock
本身不是 const
函数)。
如果你想保留函数 const
,你必须将互斥锁声明为 mutable
,这是一个允许 const 函数修改它的 cv 限定符,即
//can now be locked (i.e. modified) by a const function
mutable boost::mutex _mutex;
使用 mutable
放宽对使用此限定符声明的成员变量的 const
约束,这是绕过 constness 的一种方法,因此请注意不要滥用它。在这种情况下,这似乎是合理的,因为互斥量是您的类的内部工具,并且不参与“逻辑常量”(与“按位常量”相反)。
关于c++ - 在 const 函数中使用 boost::mutex::scoped_lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146974/