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 3
或2 1
?
答案 0 :(得分:-1)
这是未指定/未定义的行为
正在访问的对象不受互斥锁保护。互斥锁只能保持足够长的时间来读取指针。访问指针内容时不保留互斥锁,因此互斥锁不提供与update()
的同步。