OpenMP對臨界區 變數的保護方法

2021-07-14 02:31:29 字數 740 閱讀 4428

主要說以下兩種,其餘陸續更新。

一、使用critical關鍵字

#pragma omp critical
使用上述語句宣告臨界區**,位於臨界區中的**每次只能由乙個執行緒來執行,其餘執行緒要在佇列中等候。

編譯時上述語句會被解釋為對**塊兒的加鎖和解鎖操作。

看例子:

#include #include void show_num(int num)

int main(int argc, char** argv)

; int i=0;

#pragma omp parallel for

for (i = 0; i < 17; i++) }

return 0;

}

執行結果為:

這時文章中出現過的顯示內容相互覆蓋現象就消失了

需要注意是使用時要記得將臨界區的**用大括號括起來。

二、使用atomic關鍵字

#pragma omp atomic
上述語句宣告了乙個原子操作。

與critical相比,atomic語句後不支援大括號,也就是說只對其後一條語句起作用;同時對於語句內容也有要求。

FreeRTOS臨界資源保護(臨界區保護)

臨界區未保護出現的異常 今天我們說說其中之一的原因 臨界資源未保護。我們先看個例子,假如有乙個5個節點單向鍊錶,如下結構 head 1 2 3 4 5 null 有一任務a在乙個單向鍊錶的2 3節點之間插入乙個新的2a節點,已經將2 2a,還未將2a 3,此時,鍊錶變為兩個未完整的部分,如下結構 h...

三 FreeRTOS 臨界段的保護

3.4 開中斷 3.5 進入臨界段 3.6 退出臨界段 3.7 案例 野火 freertos 核心實現與應用開發實戰 基於stm32 臨界段用一句話概括就是一段在執行的時候不能被中斷的 段。在 freertos 裡面,這個臨界段最常出現的就是對全域性變數的操作,全域性變數就好像是乙個槍把子,誰都可以...

單臨界區管理和多臨界區管理的效率對比

測試 struct test1 test1 void add void sub struct test2 test2 void add void sub int main auto thread pool thread pool instance auto start time timer get ...