※ 引述《softwind (software everywhere)》之銘言:
: 同時另一個小問題
: 如果我有兩個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?
試著回答你這個問題
1. 令UI task的List叫UIList
2. 令FS task的List叫FSList
FS task還沒搜尋結束前, UI task先show空白List(即UIList).
搜尋結束後, FS task再通知UI task搜尋的結果(即FSList). UI task收到通知
後把FSList加入至UIList.
重點只有一個, UIList只有UI task在操作.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.24.147.174