可重入函式指乙個可同時被多個任務呼叫的過程,當乙個函式滿足下列條件時多為不可重入函式
(1)函式中使用了靜態的資料結構;
(2)函式中使用了malloc()、free()函式;
(3)函式彙總呼叫了標準i/o函式。(如open、read、write、close等系統呼叫)
(1)編寫可重入函式時,不應使用static區域性變數,應使用auto即預設態區域性變數或暫存器變數。
(2)當使用全域性變數時,要利用互斥訊號量或互斥鎖來保護全域性變數,或呼叫該函式前關中斷,執行完後再開,避免其他任務同時執行該函式。
不可重入函式示例:
//num為int型全域性變數,函式inc_num返回num加1的值
unsigned int example(int value)
可重入示例:
//num為int型全域性變數,函式inc_num返回num加1的值
unsigned int example(int value)
c語言可重入函式
可重入函式主要用於多工環境中,乙個可重入的函式簡單來說就是可以被中斷的函式,也就是說,可以在這個函式執行的任何時刻中斷它,轉入os排程下去執行另外一段 而返回控制時不會出現什麼錯誤 而不可重入的函式由於使用了一些系統資源,比如全域性變數區,中斷向量表等,所以它如果被中斷的話,可能會出現問題,這類函式...
C語言之可重入函式 不可重入函式
可重入函式 在 實時系統的設計中,經常會出現多個任務呼叫同乙個函式的情況。如果這個函式不幸被設計成為不可重入的函式的話,那麼不同任務呼叫這個函式時可能修改其他任 務呼叫這個函式的資料,從而導致不可預料的後果。那麼什麼是可重入函式呢?所謂可重入是指乙個可以被多個任務呼叫的過程,任務在呼叫時不必擔心資料...
C語言之可重入函式 不可重入函式
可重入函式 在 實時系統的設計中,經常會出現多個任務呼叫同乙個函式的情況。如果這個函式不幸被設計成為不可重入的函式的話,那麼不同任務呼叫這個函式時可能修改其他任 務呼叫這個函式的資料,從而導致不可預料的後果。那麼什麼是可重入函式呢?所謂可重入是指乙個可以被多個任務呼叫的過程,任務在呼叫時不必擔心資料...