gpt4 book ai didi

c++ - 我应该使用 const 使对象线程安全吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:09 24 4
gpt4 key购买 nike

我写了一个实例可以被多个线程访问的类。我使用了一个技巧来记住用户,他们必须在使用对象之前锁定对象。它涉及只保留 const 实例。当需要读取或修改敏感数据时,其他类应该调用一个方法(这是 const,因此允许)来获取锁定对象的非 const 版本。实际上,它返回一个代理对象,其中包含一个指向非常量对象的指针和一个 scoped_lock,因此它会在超出范围时解锁该对象。代理对象还重载了 operator->,因此对该对象的访问是透明的。

这样,通过访问未锁定的对象来攻击自己的脚就更难了(总是有 const_cast)。

应该避免“聪明的把戏”,反正这闻起来很糟糕。

这个设计真的很糟糕吗?我还能做什么或应该做什么?

编辑:Getter 是非常量以强制执行锁定。

最佳答案

基本问题:一个非常量引用可能存在于别处。如果它被安全地写入,并不意味着它可以被安全地读取——您可能会看到一个中间状态。

此外,某些 const 方法可能(合法地)以线程不安全的方式修改隐藏的内部细节。

分析您实际对对象和 find an appropriate synchronisation mode 做了什么.

如果您聪明的容器确实足够了解对象以通过代理控制它们的所有同步,那么将这些对象设为私有(private)内部类。

关于c++ - 我应该使用 const 使对象线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7402345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com