什么是可重入函數(shù)和不可重入函數(shù)
(1)函數(shù)體內(nèi)使用了靜態(tài)的數(shù)據(jù)結(jié)構(gòu);
(2)函數(shù)體內(nèi)調(diào)用了malloc()或者free()函數(shù);
(3)函數(shù)體內(nèi)調(diào)用了標(biāo)準(zhǔn)I/O函數(shù)。
如何寫出可重入的函數(shù)?在函數(shù)體內(nèi)不訪問那些全局變量,不使用靜態(tài)局部變量,堅(jiān)持只使用缺省態(tài)(auto)局部變量,寫出的函數(shù)就將是可重入的。如果必須訪問全局變量,記住利用互斥信號(hào)量來保護(hù)全局變量。或者調(diào)用該函數(shù)前關(guān)中斷,調(diào)用后再開中斷。
可重入函數(shù)可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)被破壞??芍厝牒瘮?shù)任何時(shí)候都可以被中斷,一段時(shí)間以后又可以運(yùn)行,而相應(yīng)的數(shù)據(jù)不會(huì)丟失??芍厝牒瘮?shù)或者只使用局部變量,即保存在CPU寄存器中或堆棧中;或者使用全局變量,則要對(duì)全局變量予以保護(hù)。
評(píng)論