同时更新结构的不同字段 - 是否安全?

Mag*_*nus 4 c concurrency

考虑我有一个结构:

struct SimpleStruct {
    int x;
    int y;
    int z;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我有3个单独的线程,每个线程只分别更新结构的x,y,z字段之一,是否可以安全地让它们同时更新,或者我应该使用互斥或​​什么来阻止它发生?

Giu*_*ano 8

这是安全的(结构是对齐的).

但是你应该注意虚假共享(参见Herb Sutter关于它的文章):如果字段在同一个缓存行中,则写入将被有效地序列化.