하위 코드가있어서 어떻게 공유 변수를 업데이트 할 수 있습니까? 공유 어떤 이유Parallel.ForEach가 공유 변수를 업데이트하지 않습니다.
List<Person> list = new List<Person> {new Person {Age = 1}, new Person {Age = 2}, new Person {Age = 5}};
long total = 0;
Parallel.ForEach(list,() => 0, (person, loop, subtotal) =>
{
Add(person, subtotal);
return subtotal;
},
finalResult => Interlocked.Add(ref total, finalResult)
);
public static void Add(Person person, int shared)
{
// Do some work
shared =+ person.Age;
}
는 매개 변수에게 심판을해야하므로 ... 정수 값 유형이있다는 "일반"C# 코드에서 작동하지 않을 것입니다 0
'ref 부분합'문제를 수정하더라도이 작업이 진행되지 않습니다. 당신은 매우 명백한 경쟁 조건을 가지고 있습니다. 값을 지속적으로 업데이트하고 읽는 중입니다. – Jonesopolis
그러면 어떻게 공유 변수를 추적 할 수 있습니까? – BobSwanson
@BobSwanson 처음부터 합계를 병렬 처리하지 마십시오. 단일 스레드에서 값을 합계하는 것보다 훨씬 느립니다. 훨씬 빠르다는 것 외에도, 더 간단하고, 오류가 발생하기 쉽고 유지 보수가 용이합니다. – Servy