两个线程可以写入同一数组的不同元素吗?

标签 c arrays multithreading

<分区>

我想知道两个线程是否可以修改同一个数组的元素。

如果我有 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/

相关文章:

c - 低级控制台输入和重定向

c - VS2019 C6011 错误取消引用空指针 'NewNode'

php - 使用PHP将一个字符串分成两个等长的部分

java - 如何在 Java/Scala 中中断提交给 newSingleThreadExecutor 的线程?

c - 在函数 'print_usage' : error: expected ')' before 'PROGRAM' 中

c - 在 C 中释放内存的模式?

c++ - 初始化未命名的结构指针/数组

c++ - 传递动态结构数组 C++

android - 在android中,如果我在线程中运行网络请求但不想在响应返回之前刷新UI怎么办?

java - 如何修复 'Offset commit failed on partition com.application.iot.measure.stage-0 at offset 1053078427: The request timed out.'