using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
double[] numbers = new double[10000];
Parallel.For(0, 9999, index => numbers[index] = index * 3);
Thread.MemoryBarrier();
// do something with numbers
}
}
上面是否需要MemoryBarrier(),或者Parallel.For是否有“内置”内存屏障?
答案 0 :(得分:4)
当你执行Parallel时,不需要内存屏障。对于调用该函数的线程等待任务结束,如果它等待,它可能会使用一些同步器来通知一个等待线程,当同步器通知“需要”才有释放障碍,释放障碍保证上面代码中完成的所有更改都是全局可见的,因此您不需要memory.barrier