写入数组中的不同偏移始终定义良好

时间:2016-01-10 14:30:58

标签: c++ multithreading language-lawyer c++14

this问题中提出,同时写入char数组中的两个不同偏移量意味着数据竞争,因为某些处理器(如Alpha)没有字节寻址所以它是很难实现这一点。

我当然看到这会大大减慢在alpha处理器上写入字节的速度(基本上涉及LL / SC),但据我了解C ++标准,数组中的每个字段都是它自己的内存位置(尽管从阅读§1.7开始) ,我也可以看到整个数组作为一个内存位置 - 这可能是这个问题归结为。)

所以基本上是以下伪代码

char arr[10]; // global field
Thread 1:
arr[1] = 0;
Thread 2:
arr[0] = 1;
是否根据C ++ 14标准明确定义?

1 个答案:

答案 0 :(得分:6)

从C ++ 14标准(1.7 / 3):

  

两个或多个执行线程(1.10)可以更新和访问不同的内存位置,而不会相互干扰。

之前定义的地方(强调我的)

  

内存位置可以是标量类型的对象,也可以是所有相邻位域的最大序列   非零宽度。

所以数组的char是内存位置,但数组本身不是;因此,写入不同char的单独线程不会相互干扰。