小弟有一個小問題
所謂 thread-safty 從wiki上 我看到的 實做項目有
1. Re-entrancy
2. Mutual exclusion
3. Thread-local storage
4. Atomic operations
對於一個 MT safe function來說
完全不Reference to static var. + 僅使用MT safe function
是不是 還不滿足MT safe 的要求?
同時另一個小問題
如果我有兩個task, 假設是 常見的 UI和File system兩個task
假設今天user要求show檔案列表
so UI task 初始化一個structure 然後丟給 FS task
FS task 把file list填完再回給UI task(先不管blocking or non-blocking)
然後UI 再把file list show出來
上面是預期的行為 似乎看起來也很正常
可是也有可能 萬一 今天UI init value後 丟給FS task撈list,
結果還沒有切到 FS task, UI 就繼續往下run...
這樣就會show出 空的file list這是錯誤的操作
這樣來看的話 UI get FS的list 的動作 是不是只能是
1. blocking call.
or
2. 如果是 non-blocking, 也要用 condition var 擋住task執行?
這樣的FS API 才能叫做 thread-safty?
順便一提:
wiki上的說法 執行緒安全...
"... 很多C庫代碼(比如某些strtok的實現,
它將「多次調用中需要保持不變的狀態」儲存在靜態變數中,
導致不恰當的共享)不是執行緒安全的 ..."
so 有另一個 相同的function: strtok_r
The strtok_r() function is thread-safe and
stores its state in a user-supplied buffer instead of ...
感謝版友的意見
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.26.189.174