不可重入函數(shù)列表 C語言可重入函數(shù)應該注意哪些事項?
C語言可重入函數(shù)應該注意哪些事項?你好,我是小徐艾。我很高興為你回答。再入函數(shù)又稱為再入函數(shù),是一種不能直接或間接調用自身的函數(shù)。重入函數(shù)可以遞歸調用,包括中斷函數(shù)在內的任何函數(shù)都可以隨時調用。在C5
C語言可重入函數(shù)應該注意哪些事項?
你好,我是小徐艾。我很高興為你回答。再入函數(shù)又稱為再入函數(shù),是一種不能直接或間接調用自身的函數(shù)。重入函數(shù)可以遞歸調用,包括中斷函數(shù)在內的任何函數(shù)都可以隨時調用。在C51中編譯時,重入函數(shù)使用模擬堆棧。函數(shù)描述:函數(shù)名(形式參數(shù)表)可重入注:1。重入函數(shù)不能傳遞位類型參數(shù)。2PL/M51兼容函數(shù)不能具有可重入性,因此不能調用重入函數(shù)。三。編譯時:模擬的堆棧區(qū)域由reentry函數(shù)創(chuàng)建。在小模式下,模擬堆棧區(qū)域位于IDA區(qū)域;在緊湊模式下,模擬堆棧區(qū)域位于pdata區(qū)域;在大模式下,模擬堆棧區(qū)域位于擴展數(shù)據(jù)區(qū)域。4在同一個程序中可以定義和使用不同存儲模式的再入函數(shù)。任何模式的重入函數(shù)都不能調用不同內存模式函數(shù)的重入函數(shù),但可以調用普通函數(shù)。5實際參數(shù)可以傳遞給一個間接調用的重入函數(shù)。沒有重入屬性的間接調用函數(shù)不能包含調用參數(shù)。更專業(yè)的科學知識,請關注我。如果你喜歡我的回答,也請給我表揚或轉發(fā),你的鼓勵是支持我寫下來的動力,謝謝。
什么是C語言的可重入函數(shù)?怎么使用?
字面意思是您可以重復輸入??芍厝胄允嵌嗳蝿障到y(tǒng)中的一個概念,它意味著該函數(shù)在運行到任何位置時都可以被中斷以執(zhí)行其他任務,并且返回時不會出錯。當我們同時處理多個任務時,為什么會有這個概念呢。我舉個例子。我們定義了一個名為func的函數(shù)和兩個線程。兩個線程都調用func。情況就是這樣。當線程1執(zhí)行func時,線程2開始執(zhí)行func。結果,兩個線程都執(zhí)行了兩次func。在正常情況下,兩個線程都可以成功執(zhí)行,并且沒有錯誤。我們認為func是一個可重入函數(shù)。但是,如果func使用一個公共資源,例如讀取同一個文件或訪問同一個全局變量,則當兩個線程訪問公共資源時,會導致沖突。這樣的函數(shù)是不可重入的。
單片機C語言設計里說的可重入函數(shù)是什么?和不可重入函數(shù)的區(qū)別是什么?
1、可重入函數(shù)
1)什么是可重入函數(shù)?
可重入函數(shù)可由多個任務同時使用,無需擔心數(shù)據(jù)錯誤。相反,非可重入函數(shù)不能由多個任務共享,除非它們相互排斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)。可重入函數(shù)可以隨時中斷,以后繼續(xù)運行而不會丟失數(shù)據(jù)??芍厝牒瘮?shù)要么使用局部變量,要么在使用全局變量時保護其數(shù)據(jù)。
2)可重入函數(shù):
不保留連續(xù)調用的靜態(tài)數(shù)據(jù)。
不返回指向靜態(tài)數(shù)據(jù)的指針;所有數(shù)據(jù)由函數(shù)的調用者提供。
通過使用本地數(shù)據(jù)或制作全局數(shù)據(jù)的本地副本來保護全局數(shù)據(jù)。
如果必須訪問全局變量,請記住使用互斥信號量保護它們。
切勿調用任何不可重入函數(shù)。
3)不可重入函數(shù):
函數(shù)中使用靜態(tài)變量,無論是全局變量還是局部變量。
函數(shù)返回一個靜態(tài)變量。在函數(shù)中調用不可重入的函數(shù)。
在函數(shù)體中使用靜態(tài)數(shù)據(jù)結構;
在函數(shù)體中調用malloc()或free()函數(shù);
在函數(shù)體中調用其他標準I/O函數(shù)。
函數(shù)是單例中的成員函數(shù),它使用的成員變量不是由線程獨立存儲的。
一般來說,如果一個函數(shù)在重入條件下使用了不受保護的共享資源,那么它是不可重入的
看了下面兄弟的回復,我們只能說它是對的一半。
真正的原因是abi(應用程序二進制接口)。
ABI定義了與系統(tǒng)交互的細節(jié),如數(shù)據(jù)類型、大小和對齊方式;調用約定(控制函數(shù)的參數(shù)傳遞方向、可變長度處理、堆棧清理體以及如何接受返回值等);系統(tǒng)調用的編碼以及應用程序如何對操作系統(tǒng)進行系統(tǒng)調用系統(tǒng);以及采用完整ABI操作系統(tǒng)基本格式、程序庫等的第二代對象文件。完整的ABI,如英特爾二進制兼容標準(IBCs),允許支持它的操作系統(tǒng)上的程序在支持此ABI的其他操作系統(tǒng)上運行,而無需修改。
其他ABI標準化細節(jié)包括C名稱修改和同一平臺上編譯器之間的調用約定,但不包括跨平臺兼容性。
至于下面兄弟提到的eax save返回值,這只是X86的ABI規(guī)范。在其他CPU架構平臺(如PowerPC)中,實現(xiàn)是不同的!--在PowerPC中,返回值存儲在R3寄存器中