假设我有两个数组:
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 的值来处理各种重要的东西。(请注意,两个工作线程可能不会被终止并且可能会被重用,但主线程不会恢复,直到它们都通知它这样做。)
所以,我的问题是:如何确定主线程会看到两个工作线程对数组所做的修改?我可以指望这种情况发生吗,或者我是否需要通过一些特殊的程序来确保工作线程刷新他们对数组的写入并且主线程丢弃其缓存的数组值?