信號量有幾種類型 什么是可重入性?
什么是可重入性?可重入函數可以由多個任務同時使用,而無需擔心數據錯誤。相反,非可重入函數不能由多個任務共享,除非它們相互排斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)??芍厝牒瘮悼梢噪S時中斷,以
什么是可重入性?
可重入函數可以由多個任務同時使用,而無需擔心數據錯誤。相反,非可重入函數不能由多個任務共享,除非它們相互排斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)??芍厝牒瘮悼梢噪S時中斷,以后繼續(xù)運行而不會丟失數據??芍厝牒瘮狄词褂镁植孔兞浚丛谑褂萌肿兞繒r保護其數據。可重入函數:不為連續(xù)調用保存靜態(tài)數據。不返回指向靜態(tài)數據的指針;所有數據都由函數的調用者提供。通過使用本地數據或制作全局數據的本地副本來保護全局數據。如果必須訪問全局變量,請記住使用互斥信號量來保護它們。永遠不要調用任何不可重入的函數。
什么是可重入函數?
可重入函數:主要用于多任務環(huán)境??芍厝牒瘮抵皇且粋€可以中斷的函數。換言之,當函數被執(zhí)行時,它可以在任何時候被中斷,然后轉移到操作系統調度以執(zhí)行另一段代碼。返回控件時不會出錯。
單片機C語言設計里說的可重入函數是什么?和不可重入函數的區(qū)別是什么?
1、可重入函數
1)什么是可重入函數?
可重入函數可由多個任務同時使用,無需擔心數據錯誤。相反,非可重入函數不能由多個任務共享,除非它們相互排斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)??芍厝牒瘮悼梢噪S時中斷,以后繼續(xù)運行而不會丟失數據??芍厝牒瘮狄词褂镁植孔兞?,要么在使用全局變量時保護其數據。
2)可重入函數:
不保留連續(xù)調用的靜態(tài)數據。
不返回指向靜態(tài)數據的指針;所有數據由函數的調用者提供。
通過使用本地數據或制作全局數據的本地副本來保護全局數據。
如果必須訪問全局變量,請記住使用互斥信號量保護它們。
切勿調用任何不可重入函數。
3)不可重入函數:
函數中使用靜態(tài)變量,無論是全局變量還是局部變量。
函數返回一個靜態(tài)變量。在函數中調用不可重入的函數。
在函數體中使用靜態(tài)數據結構;
在函數體中調用malloc()或free()函數;
在函數體中調用其他標準I/O函數。
函數是單例中的成員函數,它使用的成員變量不是由線程獨立存儲的。
通常,如果函數在重入條件下使用未受保護的共享資源,則該函數不可重入