c語言可重入函式和不可重入函式

2021-10-12 10:01:59 字數 386 閱讀 8191

可重入函式:函式可多執行緒同時呼叫,一般是在只有區域性變數的函式中

不可重入函式:函式一般情況下不可多執行緒同時呼叫,這樣的函式中一般有全域性、靜態變數,而這樣就涉及到了變數的保護問題,所以需要加入互斥鎖/訊號量/中斷。

我們現在舉例來說明吧!

可重入函式:

void swap_temp(int* p int* q)

不可重入函式:

//不可重入

int g_temp;

void swap_temp(int* p, int*q)

因為涉及到了全域性變數,如果有多個任務訪問g_temp時,我們需要用到互斥鎖或者訊號量來控制對全域性變數的訪問。 

C語言可重入函式和不可重入函式

在函式中如果我們使用靜態變數了,導致產生中斷呼叫別的函式的 過程中可能還會呼叫這個函式,於是原來的 靜態變數被在這裡改變了,然後返回主體函式,用著的那個靜態變數就被改變了,導致錯誤。這類函式我們稱為不可重入函式。如果是在函式體內 動態申請記憶體的話,即便 新的執行緒呼叫這個函式也沒事,因為新的執行緒...

C 可重入函式和不可重入函式

可重入函式是指能夠被多個執行緒 同時 呼叫的函式,並且能保證函式結果正確不必擔心資料錯誤的函式。不可重入函式是指不能執行在多工環境下,除非能保證互斥的函式。可重入函式特點 不可重入函式特點 可重入規則改寫不可重入函式 把乙個不可重入函式變成可重入的唯一方法是用可重入規則來重寫它。可重入規則 不要使用...

可重入函式和不可重入函式

可重入函式 可重入函式主要用於多工環境中,乙個可重入函式簡單來說是可以被中斷的函式,即可以在函式執行的任何時刻中斷它,轉入os排程下去執行另一段 而返回控制時不出現錯誤,這意味著它除了使用自己棧上的變數以外,不依賴於任何環境 包括static 這樣的函式就是purecode 純 可重入,它可以允許該...