執行緒安全和可重入的區別

2021-07-30 12:51:39 字數 618 閱讀 1508

源出處:

執行緒安全函式

可重入函式

可重入與執行緒安全

可重入與執行緒安全並不等同。一般說來,可重入的函式一定是執行緒安全的,但反過來不一定成立。它們的關係可用下圖來表示:

我們可以採用下面的變化過程來進一步說明上圖:

比如:strtok函式是既不可重入的,也不是執行緒安全的;加鎖的strtok不是可重入的,但執行緒安全;而strtok_r既是可重入的,也是執行緒安全的。

在多執行緒或有異常控制流的情況下,當某個函式執行到中途時,控制流(也就是當前指令序列)就有可能被打斷而去執行另乙個函式.而」另乙個函式」很有可能是它本身.,如果在這種情況下不會出現問題,比如說資料或狀態不會被破壞,行為確定。那麼這個函式就被稱做」可重入」的.

函式是可重入(reentrant)的,是指對於相同的(並且合法的)函式引數(包括無參函式的情況),多次重複呼叫此函式產生的行為是可預期的,即函式的行為一致,或者結果相同。不能保證這一點的函式稱為不可重入(non-reentrant)函式。

可重入和執行緒安全

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

可重入和執行緒安全

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

可重入和執行緒安全

1 定義 1 執行緒安全 多個執行緒同時執行一段 不會造成資源的衝突,不會產生錯誤的結果,那麼這段 是執行緒安全的。2 可重入 多個執行流反覆執行一段 其結果不會發生改變。2 條件 1 常見執行緒安全滿足的條件 2 常見可重入函式滿足的條件 3 區別 可重入的函式必定是執行緒安全的,而執行緒安全的函...