<分区>
我想知道两个线程是否可以修改同一个数组的元素。
如果我有 unsigned char array[4]
,thread1 可以将 array[0]
和 array[1]
设置为 'A' thread2 同时将 array[2]
和 array[3]
设置为 'B' 没有问题吗?
<分区>
我想知道两个线程是否可以修改同一个数组的元素。
如果我有 unsigned char array[4]
,thread1 可以将 array[0]
和 array[1]
设置为 'A' thread2 同时将 array[2]
和 array[3]
设置为 'B' 没有问题吗?
最佳答案
根据定义,当 1 个或多个线程将数据写入内存中的同一位置而其他线程从中读取(或写入)时,就会发生竞争条件。每个修改不同数组元素的多个线程是否会写入内存中的相同位置?答案是不。每个数组元素在属于整个数组的区域内都有一个单独为其保留的内存区域。因此,不同元素的修改不会写入任何相同的内存位置。
其实我很久以前就问过这个问题here ,并且基于此我的部分博士论文。我并行拟合了数百条曲线(最小二乘法拟合),同时更新了一个包含多个线程结果的数组。
关于两个线程可以写入同一数组的不同元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45720829/