可重入和執行緒安全

2022-09-08 10:15:12 字數 605 閱讀 8330

1 定義

(1)執行緒安全:多個執行緒同時執行一段**,不會造成資源的衝突,不會產生錯誤的結果,那麼這段**是執行緒安全的。

(2)可重入:多個執行流反覆執行一段**,其結果不會發生改變。

2 條件

(1)常見執行緒安全滿足的條件:

(2)常見可重入函式滿足的條件:

3 區別

可重入的函式必定是執行緒安全的,而執行緒安全的函式不一定是可重入的,其關係如下圖所示:

那麼要理解這兩者的區別,就在於舉出一些「可重入但不是執行緒安全」的例子,僅僅是通過文字定義的描述很容易混淆。從定義上看,執行緒安全是多執行緒同時執行同乙個函式,而可重入則是多個執行流,這是理解其區別的重點。例如有以下**:

pthread_mutex_t mut;

int function()

pthread_mutex_lock(&mut);

...   //執行流

pthread_mutex_unlock(&mut);

這個函式中加入了互斥鎖的保護機制,可見是可以被多個執行緒同時呼叫的,是執行緒安全的。但是如果程式執行到執行流中時,此時產生了中斷,os轉向中斷函式中,而在中斷函式中又呼叫了此函式,那麼就會產生死鎖,由此看來,此函式是不可重入的。

可重入和執行緒安全

執行緒安全這個詞對我來說已經不是很陌生的了,但是遇到乙個叫做可重入函式的詞,它給我的感覺和執行緒安全是這麼的相近,但既然拿出來了,肯定是有區別的,下面就說說他們之間的區別和聯絡。要先解釋這兩個詞語才行。執行緒安全 似乎是在牛客網刷題的時候看到乙個正確的選項說的是,執行緒安全問題都是由全域性變數及靜態...

可重入和執行緒安全

綜觀整個文件,術語可重入和執行緒安全總是被用來標記類和函式,表明他們如何被用在多執行緒程式中。乙個執行緒安全的函式能被多個執行緒同時呼叫,甚至在這些呼叫使用共享資料時,因為所有對共享資料的引用是序列進行的。乙個可重入的函式也能被多個執行緒同時呼叫,但前提是每個呼叫只使用它們自己的資料。所以,乙個執行...

可重入 執行緒安全

可重入 乙個函式可以同時被呼叫,不會有影響 執行緒安全 乙個函式可以被多執行緒同時呼叫,不會有影響.可重入 執行緒安全,需要比執行緒安全更強的條件.乙個函式是可重入的,一定是執行緒安全的 乙個函式是執行緒安全的,不一定是可重入的 比如 malloc不是非同步 訊號安全,但是執行緒安全的,因此其不是可...