可重入函數可以做這樣的基本定義:重入意味著這個函數可以重復進入中斷函數可重入是什么,可以被并行調用 ,可以被中斷,它只使用自身棧上的數據變量,它不依賴于任務環境,在多任務調度過程中,它是安全的中斷函數可重入是什么,不必擔心數據出錯。
不可重入函數基本上與可重入函數有相反的定義了:不可重入,意味著不可被并行調度 ,否則會產生不可預料的結果,這些函數提內一般使用了靜態(static)的數據結構 ,使用了malloc()或者free()函數,使用了標準I/O函數等等。
可重入函數:
不為連續的調用持有靜態數據。
不返回指向靜態數據的指針;所有數據都由函數的調用者提供。
使用本地數據,或者通過制作全局數據的本地拷貝來保護全局數據。
如果必須訪問全局變量,記住利用互斥信號量來保護全局變量。
絕不調用任何不可重入函數。
不可重入函數:
函數中使用了靜態變量,無論是全局靜態變量還是局部靜態變量。
函數返回靜態變量。
函數中調用了不可重入函數。
函數體內使用了靜態的數據結構;
函數體內調用了malloc()或者free()函數;
函數體內調用了其他標準I/O函數。
函數是中的成員函數而且使用了不使用線程獨立存儲的成員變量 。
總的來說,如果一個函數在重入條件下使用了未受保護的共享的資源,那么它是不可重入的。