此代码中是否需要MemoryBarrier?

时间:2010-12-18 03:16:02

标签: c# .net task-parallel-library

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是否有“内置”内存屏障?

1 个答案:

答案 0 :(得分:4)

当你执行Parallel时,不需要内存屏障。对于调用该函数的线程等待任务结束,如果它等待,它可能会使用一些同步器来通知一个等待线程,当同步器通知“需要”才有释放障碍,释放障碍保证上面代码中完成的所有更改都是全局可见的,因此您不需要memory.barrier