在多线程环境中将数据写入数组
data write in array in multi-threading environment
我的多线程程序中有一个块,它执行以下操作:
void func(args){
do computation;
for(i = 0; i < n ; i++)
value[i] += computed_value;
}
多线程将执行此函数。 所以我需要使用 lock 使程序线程安全。 锁定使程序比单线程程序慢。 我尝试使用锁,但它使程序非常慢。 还请提出一些替代方法。
根据您的代码,您没有任何锁。 我会使用锁而不是没有锁作为我的方法的开始。 (没有更多的澄清,我真的帮不上那么多忙(。 如果可以,只需将操作锁定在计算中即可。
伪装示例
int computation(int i)
lock();
i = i + 1;
unlock();
return i;
这个问题很笼统,所以这里有一些一般的想法作为回应:
底线是你不能让多个线程同时读/写同一块内存。 锁定相关内存的读取和写入是一种方法。 那要么使用您自己的锁,要么使用原子 += 函数(如果您可用(。
我能想到的另外两种通用选择:
1( 让每个线程负责数组的单独部分。 例如,如果您的数组中有 4 个线程和 20 个元素,则线程 1 可以对元素 0-4 进行操作,线程 2 可以对元素 5-9 进行操作,依此类推。
2( 为每个线程创建一个单独的数组副本,然后将数组的副本合并到一个最终数组中。 例如,如果您的数组中有 4 个线程和 20 个元素,则线程 1 将在副本 1 上运行,线程 2 将在副本 2 上运行,依此类推。 完成后,您必须将 4 个数组合并为 1。
显然,第二个想法需要更多的内存,但我们对问题的参数知之甚少,所以这些只是一些一般的想法。
相关文章:
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 很好的语法来获取对向量/数组数据的大小引用?
- 数组数据以错误的方式遍历 Python/Matlab
- 访问 Arduino 中的结构数组数据
- 在能够从 Web 浏览器访问大型数组数据的同时存储它的最可行方法是什么?
- 在C 类中声明数组数据
- 如何在 c++ 中将字符串数组数据写入输出文件
- 使用 stl::map 和 stl::unordered_map 对包含大量重复元素的数组数据进行排序
- 检索字符数组数据时出现问题
- 共享库的C 访问数组数据
- 将包含数组数据成员的结构保存到文件
- C++中的LinkedList字符数组数据
- 正在尝试使用if语句检查数组数据
- 在单独的数据中显示数组数据
- 如何在 c++ 中将字节类型的字符数组数据保存到文件中
- 从数组数据中缺少第一个元素的 DLL 返回C++结构
- 如何在C++中表示二进制字节数组数据
- 实现动态数组数据结构时出现"double free or corruption"错误
- 多维数组数据成员的运行时错误
- C++ :使用 * 显示数组数据的条形图