c++ - 在 const 函数中使用 boost::mutex::scoped_lock

标签 c++ constants boost-mutex

这段代码无法编译:

    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/

相关文章:

c++ - Bison:避免语义值的默认构造

c++ - 为什么 std::uniform_int_distribution<IntType>::operator() 不是 const?

c++ - 如何在一个类的不同实例之间共享互斥量?

c++ - boost::scoped_lock 似乎没有锁定 std::cout

c++ - 在 Linux 系统上使用 c++ 链接到共享和静态库

c++ - 使用gdb/qtdebugger读取Qt应用程序堆栈跟踪时出现问题

c++ - 在具有引用字段的类上放置新的

java - java 中宏替换的替代方案

c++ - 更改结构元素的常量

c++ - 多线程程序生产者/消费者 [boost]