OpenMP 線程同步之臨界區


多核/多線程編程中肯定會用到同步互斥操作。除了互斥變量以為,就是臨界區。

臨界區是指在用一時刻只允許一個線程執行的一段用{...},包圍的代碼段。

在OpenMP中臨界區聲明方法如下:

#pragma omp critical [(name)] //[]表示名字可選

{

    //需要同一時刻只能有一個線程訪問的代碼

}

 

如下面的代碼:

 1 #include <stdio.h>
 2 #include <omp.h>
 3 
 4 int main()
 5 {
 6     int sum = 0;
 7 #pragma omp parallel
 8     printf("Hello World!!!\n");
 9 
10 #pragma omp parallel for    
11     for (int i = 0; i < 10000; ++i)
12     {
13 #pragma omp critical
14         {
15           sum = sum + i%7;
16         }
17     }
18     printf("Sum: %d\n" ,sum);
19     return 0;
20 }

執行結果:

 

可以看到,機器有8個核,啟動了8個線程。如果將代碼中的第13行注釋掉,執行結果中的Sum基本就是不確定的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM