2010年8月17日 星期二

Multi Thread 下的 function 設計條件

在開發 Multi Thread 的軟體時,所有可能被 Thread 呼叫的 function 都要盡量設計成 Reentrant,這可以提供最安全的執行環境與結果。

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 函數,都要確實做好鎖定工作。

沒有留言:

張貼留言