c ++在一个线程写入和第二个读取同一个对象时会发生什么?(安全吗?)

Wan*_*rer 1 c++ multithreading

在一个线程写入和第二个线程中读取同一个对象时会发生什么?这会导致应用程序崩溃吗?

我的想法是,在主线程上将数据保存到对象或从对象更改数据,在第二个线程上只读取此数据.

如果我理解,问题可能只是在写入对象新值并同时从同一对象读取时,读取值将是旧的.但这对我来说不是问题.

我搜索我的问题并找到了这个主题如果两个线程读写同一块内存会发生什么但我不确定它是否适用于我的问题.

Bat*_*eba 7

除非对象是原子的,否则一个线程写入的行为和另一个读取同一对象的线程是不确定的.

您目前认为唯一的问题是可以读取状态数据是不正确的.你不能假设这只是未定义行为的表现.特别是,您可能会发现您读取的值既不是旧值也不是新值.

  • 值得一提的是,一个特别合理的失败是读取的值既不是旧值也不是新值.但是,根据优化器,代码可以完成任何操作. (5认同)