可重入函數

可重入函數主要用於多任務環境中,一個可重入的函數簡單來說就是可以被中斷的函數,也就是說,可以在這個函數執行的任何時刻中斷它,轉入OS調度下去執行另外一段代碼,而返回控制時不會出現什麼錯誤。

不可重入的函數由於使用了一些系統資源,比如全局變量區中斷向量表等,所以它如果被中斷的話,可能會出現問題,這類函數是不能運行在多任務環境下的。

可重入函數是指一個可以被多個任務調用的過程,任務在調用時不必擔心數據是否會出錯。不可重入函數在實時系統設計中被視爲不安全函數。

保證函數的可重入性的方法:

  在寫函數時候儘量使用局部變量例如寄存器、堆棧中的變量),對於要使用的全局變量要加以保護(如採取關中斷、信號量等方法),這樣構成的函數就一定是一個可重入的函數。

滿足下列條件的函數多數是不可重入的:

  1) 函數體內使用了靜態的數據結構;
  2) 函數體內調用了malloc()或者free()函數;
  3) 函數體內調用了標準I/O函數。

如何編寫可重入的函數?

  答:在函數體內不訪問那些全局變量,不使用靜態局部變量,堅持只使用局部變量,寫出的函數就將是可重入的。如果必須訪問全局變量,記住利用互斥信號量來保護全局變量。

發佈了11 篇原創文章 · 獲贊 5 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章