看板 C_and_CPP 關於我們 聯絡資訊
pthread 多緒程式設計 (p237) 關於這問題的描述, 簡單提一下 (詳細請參閱該書籍): reentrant function: 不可使用 static, global data thread safe: 使用 mutex 來保護 global data, 而 data 不一定是變數, 可能是檔案, 可能是某個週邊。 ref: http://blog.xuite.net/jackie.xie/bluelove/46644355 可重入與執行緒安全這兩個概念,都與函數處理資源的方式有關。可重入與執行緒安全是 兩個獨立的概念,一個函數可以是可重入或是執行緒安全,或是同時滿足兩者,或是同時 不滿足兩者的。 這我比較想不懂, 我以為 thread safe 就一定也是 re-entrant。 ※ 引述《nikeasyanzi (nikeasyanzi)》之銘言: : 這比較像是OS的問題 : 但還是PO上來問問 : 想請問一下 reentrant vs. thread-safety 的差別 : 小弟我上網去看了一下 http://0rz.tw/dwWTD : 但我困惑的是 網頁給出如下說明 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.239.46
purpose:The Old New Thing 網站那篇文中的 AddToString 函數不就 11/20 12:22
purpose:已經證明,可以是 thread safe 但不滿足 re-entrant 了 11/20 12:23
descent:是因為那個全域變數 s 的關係嗎? 11/20 12:33
yvb:AddToString('\0')跟AddToString('\\')是假設要處理卻會出問題 11/20 12:43
yvb:拿一個有bug的code來說明很怪... 11/20 12:43
Ebergies:因為 thread-safe 不保證同個 thread 多次進入不會出問題 11/20 12:59
Ebergies:簡單的例子, 當收到 SIGNAL 的時候有可能你正在 lock 裡 11/20 12:59
Ebergies:結果 handler 又 call 一次你的 thread safe func 就炸了 11/20 13:00
這不是說明前一個 thread 還沒取得 lock, 後一個 thread 才會完成取得 lock 的動作, 並順利執行, 這樣會有問題嗎? ※ 編輯: descent 來自: 59.125.239.51 (11/20 14:42)
HuangTzHuan:Ebergies 的意思是「同一個」thread 喔 11/20 18:46
jackace:假設你的程式在釋放mutex前就遞迴就沒法reentrant啦 11/20 22:01
adrianshum:文中提到re-entrant 比thread-safe更強,是不是可以理 11/25 09:00
adrianshum:解為 reentrant必為thread-safe? 有thread-unsafe 但 11/25 09:01
adrianshum:reentrant 的例子嗎? 11/25 09:01
adrianshum:怪的是文中說either, 但圖卻是reentrant 是threadsafe 11/25 09:04
adrianshum:的子集(即不存在reentrant 但non-thread-safe) 11/25 09:05