一、可重入函式
1)什麼是可重入性?
可重入(reentrant)函式可以由多於一個任務併發使用,而不必擔心資料錯誤。相反, 不可重入(non-reentrant)函式不能由超過一個任務所共享,除非能確保函式的互斥(或者使用訊號量,或者在程式碼的關鍵部分禁用中斷)。可重入 函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。可重入函式要麼使用本地變數,要麼在使用全域性變數時保護自己的資料。
2)可重入函式:
不為連續的呼叫持有靜態資料。
不返回指向靜態資料的指標;所有資料都由函式的呼叫者提供。
使用本地資料,或者透過製作全域性資料的本地複製來保護全域性資料。
如果必須訪問全域性變數,記住利用互斥訊號量來保護全域性變數。
絕不呼叫任何不可重入函式。
3)不可重入函式:
函式中使用了靜態變數,無論是全域性靜態變數還是區域性靜態變數。
函式返回靜態變數。
函式中呼叫了不可重入函式。
函式體內使用了靜態的資料結構;
函式體內呼叫了malloc()或者free()函式;
函式體內呼叫了其他標準I/O函式。
函式是singleton中的成員函式而且使用了不使用執行緒獨立儲存的成員變數 。
總的來說,如果一個函式在重入條件下使用了未受保護的共享的資源,那麼它是不可重入的
一、可重入函式
1)什麼是可重入性?
可重入(reentrant)函式可以由多於一個任務併發使用,而不必擔心資料錯誤。相反, 不可重入(non-reentrant)函式不能由超過一個任務所共享,除非能確保函式的互斥(或者使用訊號量,或者在程式碼的關鍵部分禁用中斷)。可重入 函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。可重入函式要麼使用本地變數,要麼在使用全域性變數時保護自己的資料。
2)可重入函式:
不為連續的呼叫持有靜態資料。
不返回指向靜態資料的指標;所有資料都由函式的呼叫者提供。
使用本地資料,或者透過製作全域性資料的本地複製來保護全域性資料。
如果必須訪問全域性變數,記住利用互斥訊號量來保護全域性變數。
絕不呼叫任何不可重入函式。
3)不可重入函式:
函式中使用了靜態變數,無論是全域性靜態變數還是區域性靜態變數。
函式返回靜態變數。
函式中呼叫了不可重入函式。
函式體內使用了靜態的資料結構;
函式體內呼叫了malloc()或者free()函式;
函式體內呼叫了其他標準I/O函式。
函式是singleton中的成員函式而且使用了不使用執行緒獨立儲存的成員變數 。
總的來說,如果一個函式在重入條件下使用了未受保護的共享的資源,那麼它是不可重入的