使用标头中的块限制互斥锁范围

时间:2017-01-10 17:13:48

标签: c++ multithreading scope

我有一个拥有自己的工作线程的类,并且该类的一些成员变量在主线程和worker之间共享。如何使用互斥锁仅锁定正在共享的成员变量?

例如,这不起作用(因为块范围在任何函数之外)。

class Foo {

public:
    // Some stuff
private:
    boost::thread *m_worker;
    Bar m_bar_nonshared;

    {
        boost::mutex m_mutex;
        Bar m_bar_shared;
    }
};

1 个答案:

答案 0 :(得分:0)

互斥锁不会锁定成员变量,它会锁定代码。锁定成员变量的唯一方法是锁定访问它的唯一代码。

也就是说,将锁定置于访问函数(获取/设置)中,并且不允许以任何其他方式访问成员。