可重入函式是指能夠被多個執行緒「同時」呼叫的函式,並且能保證函式結果正確不必擔心資料錯誤的函式。
不可重入函式是指不能執行在多工環境下,除非能保證互斥的函式。
可重入函式特點:
不可重入函式特點:
可重入規則改寫不可重入函式:
把乙個不可重入函式變成可重入的唯一方法是用可重入規則來重寫它。
可重入規則:
不要使用全域性變數。如果必須使用記得用互斥訊號量保護,因為別的**很可能修改這些變數值
在和硬體發生互動的時候,切記執行類似disinterrupt()
之類的操作,就是關閉硬體中斷。
完成互動記得開啟中斷,在有些系列上,這叫做「進入/退出核心」或者用os_enter_kernal/ os_exit_kernal
來描述。
不能呼叫任何不可重入的函式。
謹慎使用堆疊。最好先在使用前先os_enter_kernal
。
總之,必須保證中斷是安全的
可重入函式和不可重入函式
可重入函式 可重入函式主要用於多工環境中,乙個可重入函式簡單來說是可以被中斷的函式,即可以在函式執行的任何時刻中斷它,轉入os排程下去執行另一段 而返回控制時不出現錯誤,這意味著它除了使用自己棧上的變數以外,不依賴於任何環境 包括static 這樣的函式就是purecode 純 可重入,它可以允許該...
可重入函式和不可重入函式
作為乙個程式設計人員,一定要有可重入和不可重入概念,但工作中發現的現象讓我大跌眼鏡 很多人沒聽說過!亡羊補牢,為時不晚,現在在腦子中種下這顆概念種子也不遲。為什麼說一定要有可重入和不可重入的概念呢,因為我們的程式肯定不只在main 函式中簡單的跑乙個while 1 迴圈,一般都會涉及到中斷和作業系統...
可重入函式和不可重入函式
在實時系統的設計中,經常會出現多個任務呼叫同乙個函式的情況。如果有乙個函式不幸被設計成為這樣 那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。這樣的函式是不安全的函式,也叫不可重入函式。注 含有全域性變數或者靜態成員變數 不可重入函式 相反,肯定有乙個安全的函式...