Koo*_*sha 0 c++ concurrency atomic
对 C++ 基本类型(多次读取和多次写入)的变量进行并发非原子读取和写入是 C++ 中的未定义行为吗?我不关心实际值,因为稍后我会发现是否发生了并发读/写,如果发生了,我会忽略当前值。我只想知道行为是否是定义良好的 C++?
如果是良好定义的,它仍然是良好定义的,如果线索1的读/写x和线程2的读/写y在,其中x和y是如下的成员union?
union {
int x;
double y;
};
Run Code Online (Sandbox Code Playgroud)
对 C++ 基本类型(多次读取和多次写入)的变量进行并发非原子读取和写入是 C++ 中的未定义行为吗?
是的。标准(引自最新草案)说:
[介绍.races]
如果程序包含两个潜在的并发冲突操作,则程序的执行包含数据竞争,其中至少一个不是原子的,并且都不在另一个之前发生,除了下面描述的信号处理程序的特殊情况。任何此类数据竞争都会导致未定义的行为。...
只是想知道行为是否是定义良好的 C++?
它是未定义的。
如果线程 1 读取/写入 x 并且线程 2 读取/写入 y,其中 x 和 y 是以下联合的成员?
这可能甚至“更多”未定义,因为不仅存在数据竞争,而且还可能读取联合的非活动成员的值。