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

作者: NIAZ (扁魚)   2015-04-22 18:25:46
※ [本文轉錄自 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住的問題
作者: LiloHuang (十年一刻)   2015-04-22 18:27:00
通常刪除檔案應該都很快,先將檔案重新命名再刪除呢 :)
作者: NIAZ (扁魚)   2015-04-22 18:33:00
可能因為SD卡檔案系統的關係,所以滿慢的,rename也試過,慢
作者: LiloHuang (十年一刻)   2015-04-22 18:35:00
每次都會產生一個新的檔名,另外再用一個檔案紀錄檔名這樣就可以同時寫入新的檔案,也同時可以刪除舊檔得注意 SD 卡本身的 IOPS 可能太低,任何操作都很慢...依照上述的方式,就是得針對該記錄檔名的索引檔案上鎖也可以直接將該新檔名擺在記憶體 (e.g. std::string)
作者: NIAZ (扁魚)   2015-04-22 18:51:00
我也希望可以直接對Index下手,不過目前那邊是vendor提供的API,所以沒辦法這樣做
作者: hichcock (快樂一整年 ^^~~~)   2015-04-23 09:05:00
用 flag 辨識檔案是否處理中critical section 保護 flag

Links booklink

Contact Us: admin [ a t ] ucptt.com