星期四, 7月 02, 2009

Reentrant & Thread-Safe Coding Notes

Reentrant & Thread-Safe Coding Notes
可重入函式與執行緒安全心得筆記

Basic Concepts:
基本概念:
* mostly, reentrant function == thread-safe function.
大部份來說,可重入函式 == 執行緒安全函式。

How a function makes itself reentrant and thread-safe ?
如何讓一個函式可以重入跟執行續安全?
  • Not hold static data over successive calls 不要在連續呼叫中保留靜態資料
    1. Dynamic allocate buffer if in need (remember to free before return, or may curse memory leak) 需要記憶體時用動態配置 (記得釋放)
    2. Static data should be protected by a static lock too 每個靜態資料應該配一個靜態鎖保護
    3. best way = maintain buffer/data by caller. 最好的方法 = 讓呼叫者提供資料緩衝區 (許多 Linux 提供的標準可重入函式如 xxx_r 都是這樣做的)
  • Don't call non-reentrant functions or... 不要在可重入的函式中呼叫不可重入函式或...
    1. If you need to call non-reentrant library, use mutex lock on each call. 如果真的有必要呼叫不可重入函式,在每次呼叫時加上一個互斥鎖。
    2. In order to impact performance, you can provide every non-reentrant function-call which protected by every lock. 為了提升效率, 可在呼叫各不可重入函式時提供各個互斥鎖。

沒有留言: