【发布时间】:2020-09-08 07:50:35
【问题描述】:
class Foo {
public:
void set(uint64_t new_var) { var_ = new_var; }
uint64_t get() { return var_; }
private:
uint64_t var_;
};
如果一个作家多读者,是否需要锁定set 和get?
【问题讨论】:
-
这取决于代码运行的平台,但为了安全起见,您可以使用
std::atomic<uint64_t>。 -
除非声明
_Atomic,否则不能假定 C 中的变量具有原子访问权限。 CPU 数据宽度无关紧要,写入者的数量无关紧要。如果写入发生在多个指令中(例如“从堆栈加载寄存器”、“将值写入寄存器”)并在中途被中断,那么您就有竞争条件错误。在某些情况下,这可能只会导致不正确的计时错误,在其他情况下会损坏数据。
标签: c++ c concurrency