函式的可重入與執行緒安全

2021-08-10 12:01:36 字數 798 閱讀 6623

可重入的函式必須滿足以下三個條件:

(1)可以在執行的過程中可以被打斷;

(2)被打斷之後,在該函式一次呼叫執行完之前,可以再次被呼叫(或進入,reentered)。

(3)再次呼叫執行完之後,被打斷的上次呼叫可以繼續恢復執行,並正確執行。

可重入函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。不可重入(non-reentrant)函式不能由超過乙個任務所共享,除非能確保函式的互斥(或者使用訊號量,或者在**的關鍵部分禁用中斷)。

不可重入

函式多執行緒安全
執行緒安全函式要解決的問題是,多個執行緒呼叫函式時訪問資源衝突。

函式安全
不進行自變數檢查以及緩衝區溢位,指的是指當計算機向緩衝區內填充資料位數時超過了緩衝區本身的容量;理想情況下:程式會檢查資料長度,而且並不允許輸入超過緩衝區長度的字元;

strcpy(),strcat(),sprintf()

,scanf()

,sscanf()

,fscanf()

,vfscanf()

,vsprintf

,vscanf()

,vsscanf()

,streadd()

,strecpy()

,strtrns()

,gets

,fgets

舉例說明

執行緒安全與可重入函式

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

可重入函式與執行緒安全

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

可重入函式與執行緒安全

可重入函式與執行緒安全 執行緒安全 假如在乙個函式中它是這麼寫的,在乙個全域性鍊錶上存放資料,在單執行緒模式下,我們先new乙個新的節點然後讓head next指向這個節點,這種場景在多執行緒場景下會是這樣的過程,執行緒一new了乙個節點,然後cpu轉去執行執行緒二,執行緒二new乙個節點後head...