C# Language
가변 쓰레드를 안전하게 만든다.
수색…
Parallel.For 루프에서 변수에 대한 액세스 제어
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main( string[] args )
{
object sync = new object();
int sum = 0;
Parallel.For( 1, 1000, ( i ) => {
lock( sync ) sum = sum + i; // lock is necessary
// As a practical matter, ensure this `parallel for` executes
// on multiple threads by simulating a lengthy operation.
Thread.Sleep( 1 );
} );
Console.WriteLine( "Correct answer should be 499500. sum is: {0}", sum );
}
}
읽기 - 수정 - 쓰기 작업이 원자 적이지 않기 때문에 잠금없이 sum = sum + i
를 수행하는 것만으로는 충분하지 않습니다. 스레드는 어떤 외부 수정 덮어 sum
은 현재 값 읽은 후에 발생 sum
하지만, 변형의 값이 저장되기 전에 sum + i
다시 sum
.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow