可重入與執行緒安全

2021-09-08 10:53:42 字數 802 閱讀 5337

今天看網易公開課,孟寧老師的軟體工程(c編碼實踐篇),講到可重入和執行緒安全,結合他的講解和我的理解,寫下這篇博文,記錄一下。

孟老師最後的總結很不錯:執行緒安全是擴大了範圍的可重入,即可重入函式是指的單個函式,而執行緒安全則是真的**塊的可重入。

可重入是針對乙個函式的,可重入的函式是指,對與它操作的每乙個變數都是它自己獨佔的(或者只操作區域性變數,或者以鎖機制來實現對共享變數的互斥訪問),

而執行緒安全,是指,一段**(可能包含多個函式)對變數的訪問是它自己獨佔的(或者只使用區域性變數,或者以鎖機制來實現對共享變數的互斥訪問)。

可重入的函式不一定是執行緒安全的,那麼什麼情況下可重入的函式不是執行緒安全的呢?下面這個例子就展示了這種情況:

pthread_mutex_t g_plus;

pthread_mutex_t g_minus;

int g_ncount = 0

;void

plus()

void

minus()

上面這段**中,plus和minus都是可重入的函式,但是這段**卻不是執行緒安全的。如果要讓它是執行緒安全的,那麼對於全域性變數g_ncount的操作使用一把鎖即可。

執行緒安全的**:

pthread_mutex_t g_mutexcount;

int g_ncount = 0

;void

plus()

void

minus()

這樣這段**塊就是執行緒安全的了,因為對於全域性變數g_ncount的訪問使用的同一把鎖。

可重入與執行緒安全

之前一直糾結可重入與執行緒安全的區別,今天詳細查了一下。其實根據兩個概念的名字就可以得出結論,可重入就是重複多次結果都是一樣的,而執行緒安全則不一樣,只要不同執行緒執行的時候不會出現因不同執行緒執行順序不同而結果不同就可以。大多數情況下,要將不可重入函式改為可重入的,需要修改函式介面,使得所有的資料...

執行緒安全與可重入

1 什麼是執行緒安全 當乙個函式被多個執行緒反覆呼叫的時候,他會一直產生正確的結果,那麼這個函式就是執行緒安全的。執行緒安全函式解決了多個執行緒呼叫函式時訪問臨界資源的衝突問題。2 可重入 在多執行緒或有異常控制流的情況下,當某個函式執行到中途時,控制流有可能被打斷去執行另乙個函式,而這 另乙個函式...

可重入與執行緒安全

概念 可重入性class counter void increment void decrement intvalue const private int n counter類是可重入,但不是執行緒安全的。因為 和 操作符不是原子性的,它們通常要經歷以下三個步驟 暫存器讀取記憶體中變數的值 增加或減...