gpt4 book ai didi

c# - 从多个线程访问数组

转载 作者:太空狗 更新时间:2023-10-29 22:24:56 24 4
gpt4 key购买 nike

假设我有两个数组:

int[] array1 = new int[2000000];
int[] array2 = new int[2000000];

我将一些值粘贴到数组中,然后想将 array2 的内容添加到 array1,如下所示:

for(int i = 0; i < 2000000; ++i) array1[i] += array2[i];

现在,假设我想在多处理器机器上加快处理速度,所以我不只是像上面那样做一个循环,而是创建了两个线程。其中一个我处理了数组中的前 1000000 个元素,另一个我处理了数组中的最后 1000000 个元素。我的主线程等待这两个线程通知它它们已完成,然后继续将 array1 中的值用于各种重要的东西。 (请注意,两个工作线程可能不会终止并可能会被重用,但主线程不会恢复,直到它们都通知它这样做。)

所以,我的问题是:如何确定主线程会看到两个工作线程对数组所做的修改?我可以指望这种情况发生吗,或者我是否需要通过一些特殊的过程来确保工作线程刷新他们对数组的写入并且主线程丢弃其缓存的数组值?

最佳答案

如果您很幸运并且可以选择使用 .NET 4.0,那么您只需编写:

Parallel.For(0, 2000000, i => { array1[i] += array2[i]; });

您不需要任何明确的锁定或同步,因为:

  • 每个任务(for 循环体的执行)都会影响数组的不相交部分
  • Parallel.For 在返回之前等待所有任务完成,因此会有一个隐式内存屏障。

关于c# - 从多个线程访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com