1、從字面上的意思就是,可以重復進入??芍厝胧窃诙嗳蝿障到y(tǒng)下的概念,意思是這個函數(shù)可以在運行到任意位置的時候被中斷去執(zhí)行其他任務,并且返回的時候不會出現(xiàn)任何錯誤。為什么在多任務的時候才有這種概念。
成都創(chuàng)新互聯(lián)公司2013年至今,先為友好等服務建站,友好等地企業(yè),進行企業(yè)商務咨詢服務。為友好企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
2、可重入(reentrant)函數(shù)可以由多于一個任務并發(fā)使用,而不必擔心數(shù)據(jù)錯誤。相反, 不可重入(non-reentrant)函數(shù)不能由超過一個任務所共享,除非能確保函數(shù)的互斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)。
3、重入函數(shù),又叫再入函數(shù),是一種可以在函數(shù)體內不直接或間接調用其自身的一種函數(shù)。再入函數(shù)可被遞歸調用,無論何時,包括中斷函數(shù)在內的任何函數(shù)都可以調入。再入函數(shù)在C51編譯時使用的是模擬棧。
4、重入是指在調用一個函數(shù)且沒有返回的情況下再次調用此函數(shù),可重入函數(shù)是指一個函數(shù)發(fā)生重入時,不會導致結果的錯誤。
5、所謂可重入函數(shù)是指一個可以被多個任務調用的函數(shù)(過程),任務在調用時不必擔心數(shù)據(jù)是否會出錯。不可重入函數(shù)在實時系統(tǒng)設計中被視為不安全函數(shù)。
6、可重入函數(shù)一般用在數(shù)據(jù)的遞歸運算中,直白點的講就是能自身調用自身,在運行時會在每次調用時把上次的數(shù)據(jù)存入虛擬堆棧中,待回復運行后數(shù)據(jù)釋放。不可重入函數(shù)在數(shù)據(jù)中間數(shù)據(jù)存儲上不同,是直接釋放,數(shù)據(jù)不可恢復。
可重入(reentrant)函數(shù)可以由多于一個任務并發(fā)使用,而不必擔心數(shù)據(jù)錯誤。相反, 不可重入(non-reentrant)函數(shù)不能由超過一個任務所共享,除非能確保函數(shù)的互斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)。
可重入性是函數(shù)編程語言的關鍵特性之一。 例子在以下的C語言代碼中,函數(shù)f和函數(shù)g都不是可重入的。
重入函數(shù),又叫再入函數(shù),是一種可以在函數(shù)體內不直接或間接調用其自身的一種函數(shù)。再入函數(shù)可被遞歸調用,無論何時,包括中斷函數(shù)在內的任何函數(shù)都可以調入。再入函數(shù)在 C51編譯時使用的是模擬棧。
可以使用全局變量、靜態(tài)變量。關鍵是不是“只讀”。如果只讀,那怎么用都行。如果有寫的操作,最好避開,實在避不開就要用信號量等機制防止多線程沖突。
重入一般可以理解為一個函數(shù)在同時多次調用,例如操作系統(tǒng)在進程調度過程中,或者單片機、處理器等的中斷的時候會發(fā)生重入的現(xiàn)象。
像printf()和malloc()之類的標準庫函數(shù),它們會使用全局的數(shù)據(jù)(比如malloc()需要使用進程的堆數(shù)據(jù)結構)是不可重入的,即使加鎖也無法解決,加鎖可以使得庫函數(shù)Tread-safe,但是無法解決可重入。
其實printf不是重載,c語言不支持函數(shù)重載 這句話是對的。printf函數(shù)是通過變長參數(shù)表實現(xiàn)的。你可以查看一下printf的函數(shù)原型聲明。printf函數(shù)的實現(xiàn)在不同的機器上是不同的,但提供的接口是一致的。
不可重入函數(shù),例如:這個函數(shù)由于使用了靜態(tài)全局變量,對sum的并行性操作結果是未知的,是不安全的操做。若此函數(shù)被多個進程調用的話,結果是未知的。
在編寫程序時經(jīng)常會用到此函數(shù)。若成功則返回輸出的字符數(shù),輸出出錯則返回負值。printf()函數(shù)的調用格式為:printf(格式化字符串>, 參量表>)。
做嵌入式,系統(tǒng),只用C語言就夠了,如果是開發(fā)嵌入式軟件,特別是用戶應用軟件才需要用到C++。并且需要掌握到 精通 的程度。下一步,看書。