Reentrant function 就是可以被重疊執行的 function,講白話就是一個動作還沒做完之前,又重新做了同樣的動作,重疊執行的狀況發生卻不會影響到結果的正確性,符合這種特性即稱為 Reentrant
有些情況就要把 function 設計為 Reentrant,例如多個 Thread 執行同一個 function,或是在 Thread 中在做了某些事後又呼叫自己,整數比大小就是個 Reentrant function 的例子
int Max(int a, int b)
{
if(a > b)
{
return a;
}
return b;
}
注意這種 function 的條件為
1. 非 const 的區域或全域變數不可使用 (以免之後的 Thread 改變了值)
2. return 值不可為非 const 的區域或全域變數(理由同上)
3. 僅依賴呼叫者提供的參數(安全又衛生)
4. 可重疊執行,所以沒有 Lock 的機制(很直觀)
5. function 內部呼叫的 function 也必須為 Reentrant (不然呢?)
當然,設計 Reentrant 函數這是非常難達成的,所以其他的非 Reentrant 函數,都要確實做好鎖定工作。
沒有留言:
張貼留言