可重入函式與執行緒安全

2021-07-12 04:28:33 字數 689 閱讀 6433

可重入函式與執行緒安全

執行緒安全:

假如在乙個函式中它是這麼寫的,在乙個全域性鍊錶上存放資料,在單執行緒模式下,我們先new乙個新的節點然後讓head->next指向這個節點,這種場景在多執行緒場景下會是這樣的過程,執行緒一new了乙個節點,然後cpu轉去執行執行緒二,執行緒二new乙個節點後head->next指向執行緒二,然後執行執行緒一,執行緒一的head->next也指向它剛剛new出來的節點,這就導致乙個head指向了兩個節點,這也就是執行緒安全的問題。

導致執行緒安全問題需要滿足下面兩個條件:

1>:一定是發生在多個執行緒訪問乙個全域性變數或者靜態變數的場景下面。

2>:操作時非原子性的。

如何避免執行緒安全:

對訪問全域性或靜態變數的語句前後加鎖,這樣就不會導致多個執行緒訪問同乙個資源的問題發生。

可重入函式:

可重入函式的概念很簡單,就是這個函式是可以在任何時候都可以被打斷,並且不會造成執行緒安全,由於在可重入函式中使用的都是執行緒自己的棧空間,變數是唯一的,不會造成訪問同乙個資源的問題,如果要在其種訪問全域性或靜態變數還是要加上鎖來避免衝突。

系統中有很些函式是不能用在可重入函式中的:例如malloc,new,還有一些i/o介面函式等。

本文出自 「痕跡」 部落格,請務必保留此出處

執行緒安全與可重入函式

可重入函式 reentrant function 與執行緒安全函式 thread safe function 有時容易混淆,而且各種文件中的解釋也不是很清楚,這裡根據筆者的經驗來說明一下。執行緒安全函式 概念 執行緒安全的概念比較直觀。一般說來,乙個函式被稱為執行緒安全的,當且僅當被多個併發執行緒反...

可重入函式與執行緒安全

執行緒安全 乙個函式被稱為執行緒安全的 thread safe 當且僅當被多個併發程序反覆呼叫時,它會一直產生正確的結果。如果乙個函式不是執行緒安全的,我們就說它是執行緒不安全的 thread unsafe 我們定義四類 有相交的 執行緒不安全函式。將這類執行緒不安全函式變為執行緒安全的,相對比較容...

可重入函式與執行緒安全

若乙個程式或子程式可以 安全的被並行執行 parallel computing 則稱其為可重入 reentrant或re entrant 的。即當該子程式正在執行時,可以再次進入並執行它 並行執行時,個別的執行結果,都符合設計時的預期 可重入概念是在單執行緒作業系統的時代提出的。乙個子程式的重入,可...