2010-12-18 3 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

병렬 처리를 수행 할 때 메모리 장벽이 필요하지 않습니다. 함수를 호출하는 스레드가 작업의 끝을 기다리며, 기다리는 경우 일부 동기화 프로그램을 사용하여 대기중인 스레드를 알리고, 동기화 장치에 릴리스 장벽이 필요하다는 것을 알리는 경우 릴리스 위임은 위의 코드에서 수행 된 모든 변경 사항이 전역으로 표시되도록하므로 memory.barrier가 필요하지 않습니다.

관련 문제