저는 최근 Visual Studio에서 OpenMP를 실험하여 프로그램을 멀티 스레드하는 방법을 배우려고했습니다.Visual Studio를 사용하는 OpenMP : 경쟁 조건
나는 연속적으로이 코드를 실행하려고하면 :
내가 끝낼 무엇int totalSum = 0;
for(int x=0; x < 100; x++)
{
for(int y=0; y < 100; y++)
{
totalSum = totalSum + x + y;
}
}
은 그 totalSum =
나는 단순히 말에 의해 OpenMP의 기능을 추가하려고 990000 :
을#pragma omp parallel for
for(int x=0; x < 100; x++)
{
for(int y=0; y < 100; y++)
{
totalSum = totalSum + x + y;
}
}
결국 내가 으로 끝남 totalSum = 491293 또는 596865 또는 638260 등 ...
분명히 무슨 일이 일어나고 있는지는 경쟁 조건이 발생하고있는 것처럼 보입니다. 그리고 어떤 스레드가 totalSum에 먼저 액세스하는지에 따라 최종 답이 달라집니다.
내가 뭘 잘못하고 있니? x와 y는 private 변수로 올바르게 정의됩니다 (병렬 영역 내에서 생성되므로).
순차적으로 실행하는 것과 비교하여 프로그램을 멀티 스레딩 할 때 동일한 대답을 얻으려면 어떻게해야합니까?
귀하의 경쟁 조건은 'totalSum'입니다 ... – Mysticial