執行緒安全是指在多執行緒環境中,對臨界資源進行加鎖保護,不會出現資料不一致或資料汙染.簡單點來說,就是在多執行緒環境下併發執行,總是能得到正確的結果.
一般而言,執行緒不安全的原因往往在於對臨界資源的訪問沒有進行特別的加鎖處理.
不同的執行緒只有其私有棧空間與其暫存器的資料是私有的,其餘都是共享的!
因此臨界資源是指,全域性變數、靜態變數、堆空間等.
如果我們能夠確保互斥地訪問臨界資源,那麼整個執行緒就會處於安全狀態.
如果乙個函式,在不同執行流下重複執行,總能得到正確的結果,則這個函式被稱為可重入函式.
舉個簡單的例子,假如我正在對鍊錶進行頭插操作,如果此時突然收到訊號,轉而去執行訊號處理函式,而恰好訊號處理函式同時也需要對鍊錶進行頭插操作.
此時便有兩個執行流,乙個是主函式中的頭插;另乙個是訊號處理函式中的頭插.
當這兩個執行流都執行完畢之後,極有可能此時鍊錶中的資料發生了錯誤,那麼這個頭插函式則不是可重入的!
可重入與執行緒有一定的類似性,但兩者絕對不是等同的.
可重入的一定是執行緒安全的,而反過來則不一定.
比如:乙個函式,它用到了全域性變數,那麼這個函式不是可重入,也不是執行緒安全的.
如果對其加以改進,對全域性變數進行加鎖,那麼該函式是執行緒安全的,但不是可重入的.
如果再對其加以改進,將全域性變數改為區域性變數,則該函式是可重入的,也是執行緒安全的.
執行緒安全與可重入函式
可重入函式 reentrant function 與執行緒安全函式 thread safe function 有時容易混淆,而且各種文件中的解釋也不是很清楚,這裡根據筆者的經驗來說明一下。執行緒安全函式 概念 執行緒安全的概念比較直觀。一般說來,乙個函式被稱為執行緒安全的,當且僅當被多個併發執行緒反...
可重入函式與執行緒安全
執行緒安全 乙個函式被稱為執行緒安全的 thread safe 當且僅當被多個併發程序反覆呼叫時,它會一直產生正確的結果。如果乙個函式不是執行緒安全的,我們就說它是執行緒不安全的 thread unsafe 我們定義四類 有相交的 執行緒不安全函式。將這類執行緒不安全函式變為執行緒安全的,相對比較容...
可重入函式與執行緒安全
可重入函式與執行緒安全 執行緒安全 假如在乙個函式中它是這麼寫的,在乙個全域性鍊錶上存放資料,在單執行緒模式下,我們先new乙個新的節點然後讓head next指向這個節點,這種場景在多執行緒場景下會是這樣的過程,執行緒一new了乙個節點,然後cpu轉去執行執行緒二,執行緒二new乙個節點後head...