2010-12-18 102 views
2
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有內置的內存屏障?此代碼中是否需要MemoryBarrier?

回答

4

當你執行一個Parallel時,不需要內存屏障。對於調用函數的線程等待任務結束,如果它等待,它可能使用某個同步器來通知等待線程,當一個同步器發現「需要」有一個發佈障礙時,一個發佈障礙表明在上面代碼中完成的所有更改都是全局可見的,因此您不需要memory.barrier