问题描述
我刚刚听过talk这个关于const
在c ++ 11之内和之后实际上意味着位不变的OR线程安全的说法。此外,我们应该保证const函数是线程安全的。在我尝试实施之前,一切都很好。看这个例子:
class Foo {
public:
void increment() const {
std::lock_guard<std::mutex> lk(m);
hiddenVal+=1;
}
private:
std::mutex m;
int hiddenVal=0;
};
该代码实际上将不会编译,因为即使函数是线程安全的,我们也正在修改成员变量。因此,最终要使该函数真正有效,我们必须像这样声明变量:
mutable std::mutex m;
mutable int hiddenVal=0;
现在,我同意mutex
本质上是线程安全的,因此将其设为mutable
是有意义的,但是hiddenVal
绝对不是线程安全的,因此我们为什么也必须使其安全mutable
?
现在想象一下更大的规模。从const
函数调用的每个函数也必须为const
。在const
函数中修改的每个变量都必须为mutable
。老实说,这似乎是一种反模式。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)