可重入(reentrant)函式可以由多於乙個任務併發使用,而不必擔心資料錯誤。相反, 不可重入(non-reentrant)函式不能由超過乙個任務所共享,除非能確保函式的互斥(或者使用訊號量,或者在**的關鍵部分禁用中斷)。可重入函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。可重入函式要麼使用本地變數,要麼在使用全域性變數時保護自己的資料。
int exam; //全域性變數
//函式func3不具有可重入性
unsigned int func3( int para )
//函式func4具有可重入性
unsigned int func4( int para )
例#define max_srm 256
dsn get_srm_no()
上面也是不可重入函式的示例,因為函式內部使用了全域性變數
srm_no。
參考:
可重入函式與不可重入函式
可重入 可重新進入,也即兩次進入的現場一模一樣?在實時系統的設計中,經常會出現多個任務呼叫同乙個函式的情況。如果這個函式不幸被設計成為不可重入的函式的話,那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。那麼什麼是可重入函式呢?所謂可重入是指乙個可以被多個任務呼叫...
不可重入函式 與 可重入函式
不可重入函式不可以在它還沒有返回就再次被呼叫 該函式在被呼叫還沒有結束之前,再次被呼叫,從而可能產生錯誤。但是,可重入函式不存在這樣的問題。不可重入函式在實現時通常使用了全域性的資源 eg.全域性變數 在多執行緒的環境下,如果沒有很好的處理資料保護和互斥訪問,就可能會發生錯誤。常見的不可重入函式有 ...
可重入函式與不可重入函式
在實時 系統的設計中,經常會出現多個任務呼叫同乙個函式的情況。如果有乙個函式不幸被設計成為這樣 那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。這樣的函式是不安全的函式,也叫不可重入函式。相反,肯定有乙個安全的函式,這個安全的函式又叫可重入函式。那麼什麼是可重入...