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