我最近嘗試在Visual Studio中試用OpenMP,以瞭解如何對我的程序進行多線程。OpenMP with Visual Studio:競爭條件
如果我嘗試連續執行此代碼:
int totalSum = 0;
for(int x=0; x < 100; x++)
{
for(int y=0; y < 100; y++)
{
totalSum = totalSum + x + y;
}
}
我最終得到的是該totalSum = 990000
當我嘗試只是說添加OpenMP的功能:
#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被正確定義爲私有變量(因爲它們是在並行區域內創建的)。
我可以做些什麼來確保當我對多線程程序進行多線程處理時,與我在串行執行時相比,我可以得到相同的答案?
您的比賽條件是'totalSum'... – Mysticial