Fw: [問題] Mutex long time lock問題

看板C_and_CPP作者 (扁魚)時間10年前 (2015/04/22 18:25), 編輯推噓1(1010)
留言11則, 3人參與, 最新討論串1/1
※ [本文轉錄自 Programming 看板 #1LDtKlBS ] 作者: NIAZ (扁魚) 看板: Programming 標題: [問題] Mutex long time lock問題 時間: Wed Apr 22 18:17:16 2015 情境如下: 我要刪除檔案系統上一個最舊的大型檔案但同時需要寫入新的檔案 目前是用Mutex保護要刪除的檔案,等刪除完成後再繼續寫入新檔案 (因為還有很多條Thread在跑,怕誤用該最舊的檔案所以要保護) 理論上Mutex是不能鎖住長時間的 要避免deadlock 但是因為該檔案太大所以造成刪除的時間過長 另一條Thread要寫入新檔案就被block住 請問有何解法可以同時保護Critical Section但是仍可以讓OS做Context Switch 來達成避免寫入的Thread被刪檔案的Thread block住的問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.190.34 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1429697839.A.2DC.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: NIAZ (220.130.190.34), 04/22/2015 18:25:46

04/22 18:27, , 1F
通常刪除檔案應該都很快,先將檔案重新命名再刪除呢 :)
04/22 18:27, 1F

04/22 18:33, , 2F
可能因為SD卡檔案系統的關係,所以滿慢的,rename也試過,慢
04/22 18:33, 2F

04/22 18:35, , 3F
每次都會產生一個新的檔名,另外再用一個檔案紀錄檔名
04/22 18:35, 3F

04/22 18:36, , 4F
這樣就可以同時寫入新的檔案,也同時可以刪除舊檔
04/22 18:36, 4F

04/22 18:37, , 5F
得注意 SD 卡本身的 IOPS 可能太低,任何操作都很慢...
04/22 18:37, 5F

04/22 18:39, , 6F
依照上述的方式,就是得針對該記錄檔名的索引檔案上鎖
04/22 18:39, 6F

04/22 18:39, , 7F
也可以直接將該新檔名擺在記憶體 (e.g. std::string)
04/22 18:39, 7F

04/22 18:51, , 8F
我也希望可以直接對Index下手,不過目前那邊是vendor提供的
04/22 18:51, 8F

04/22 18:51, , 9F
API,所以沒辦法這樣做
04/22 18:51, 9F

04/23 09:05, , 10F
用 flag 辨識檔案是否處理中
04/23 09:05, 10F

04/23 09:05, , 11F
critical section 保護 flag
04/23 09:05, 11F
文章代碼(AID): #1LDtSipJ (C_and_CPP)