這篇文章主要為大家展示了“Linux中可重入函數(shù)與不可重入函數(shù)的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Linux中可重入函數(shù)與不可重入函數(shù)的示例分析”這篇文章吧。
公司主營業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出永福免費做網(wǎng)站回饋大家。Linux 中可重入函數(shù)與不可重入函數(shù)詳解
可重入函數(shù)和不可重入函數(shù)說起來有點拗口,其實寫過多進程(線程)程序的人肯定很快就能明白這兩種函數(shù)是個神馬東西。下面是我對這兩個函數(shù)的理解:
可重入函數(shù)可以理解為是能被中斷的函數(shù),并且它被中斷返回后也不會出現(xiàn)什么錯誤。
不可重入函數(shù)可以理解為如果函數(shù)被中斷的話,就會出現(xiàn)不可預(yù)料的錯誤。這是因為函數(shù)中使用了一些系統(tǒng)資源,比如全局變量區(qū),中斷向量表之類的。比如多個進程同時對一個文件進行寫操作,如果沒有同步機制的話,對文件的寫入就會變得難以控制。
在多進程(線程)環(huán)境中一定要考慮到函數(shù)的可重入性。
例如下面的例子:
int sum( int count) { static int sum = 0; int i = 0; for (i= 1; index <= count; i++) sum += i; return sum; }
這段代碼中使用了static關(guān)鍵字,如果多個進程同時執(zhí)行這一段代碼的話就會出現(xiàn)不可預(yù)測的結(jié)果。在可重入函數(shù)中,一定要避免使用static變量。或者需要使用一定的同步原則才可以。
要想將上面的代碼改為可重入函數(shù),只要將static變量改為非static的變量就可以了。
在編寫可重入函數(shù)時,如果函數(shù)中使用到了全局變量,則應(yīng)通過關(guān)中斷、信號量(即P、V操作)等手段對其加以保護,在函數(shù)體中盡量使用局部變量。
以上是“Linux中可重入函數(shù)與不可重入函數(shù)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!