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