可重入函式和不可重入函式

2021-09-27 13:30:39 字數 669 閱讀 9871

作為乙個程式設計人員,一定要有可重入不可重入概念,但工作中發現的現象讓我大跌眼鏡——很多人沒聽說過!!!亡羊補牢,為時不晚,現在在腦子中種下這顆概念種子也不遲。為什麼說一定要有可重入和不可重入的概念呢,因為我們的程式肯定不只在main()函式中簡單的跑乙個while(1)迴圈,一般都會涉及到中斷作業系統。這時,就必須要考慮乙個函式是不是可重入的以及如果不可重入對程式設計會有什麼樣的影響。

其實可重入和不可重入函式我們天天寫,如下面程式。程式中的getsum()函式就是可重入函式而getdatasum()函式是不可重入函式。可以從最簡單的角度理解可重入的含義:乙個函式在執行過程中的任意時刻被其他任務或中斷再次呼叫,而不會影響這個函式執行的結果。如getsum()函式,因為它的變數全部是區域性變數,所以在它執行的任意時刻被再次執行,也不會影響輸出結果sumis。而對於getdatasum()函式,在函式執行過程中如果被其他任務呼叫,那麼datasum中的值絕對會被影響。這是由於datasum是全域性變數的原因。在乙個程式設計中,可重入函式和不可重入函式都有它的意義和用途,所以筆者感覺沒有好與不好,而在於合不合理,怎麼寫能讓程式設計變的簡單。

//可重入函式

uint16_t getsum

可重入函式和不可重入函式

可重入函式 可重入函式主要用於多工環境中,乙個可重入函式簡單來說是可以被中斷的函式,即可以在函式執行的任何時刻中斷它,轉入os排程下去執行另一段 而返回控制時不出現錯誤,這意味著它除了使用自己棧上的變數以外,不依賴於任何環境 包括static 這樣的函式就是purecode 純 可重入,它可以允許該...

可重入函式和不可重入函式

在實時系統的設計中,經常會出現多個任務呼叫同乙個函式的情況。如果有乙個函式不幸被設計成為這樣 那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。這樣的函式是不安全的函式,也叫不可重入函式。注 含有全域性變數或者靜態成員變數 不可重入函式 相反,肯定有乙個安全的函式...

可重入和不可重入函式

把乙個不可重入函式變成可重入的唯一方法是用可重入規則來重寫它。其實很簡單,只要遵守了幾條很容易理解的規則,那麼寫出來的函式就是可重入的。1 不要使用全域性變數。因為別的 很可能覆蓋這些變數值。2 在和硬體發生互動的時候,切記執行類似disinterrupt 之類的操作,就是關閉硬體中斷。完成互動記得...