线程同步中的变量可见性

时间:2016-08-25 02:08:42

标签: c++ multithreading

struct Info {
    int a;
    int b;
};
class A {
public:
    A() {
        _info = new Info;
        _info->a = 1;
        _info->b = 1;
    }
    void update()
    {
        std::lock_guard<std::mutex> l(_m);
        _info->a = 2;
        _info->b = 3;
    }
    Info* get_info() {
        std::lock_guard<std::mutex> l(_m);
        return _info;
    }
private:
    mutable std::mutex _m;
    Info* _info;
};

A a;

// in thread 1
a.update();

// in thread 2
Info* i = a.get_info();
std::cout<<i->a<<" "<<i->b<<std::endl;

是否可以打印1 32 1

1 个答案:

答案 0 :(得分:-1)

这是未指定/未定义的行为

正在访问的对象不受互斥锁保护。互斥锁只能保持足够长的时间来读取指针。访问指针内容时不保留互斥锁,因此互斥锁不提供与update()的同步。