UNIX 文件锁机制详解
1. 文件锁类型概述
文件锁有两种基本形式:
- 锁文件(Lock files)
- 锁区域(Locked regions)
锁文件要求进程在写入受保护的数据文件之前创建并打开一个锁文件。若创建失败,进程会休眠一段时间后重试。例如,数据文件为 database.dat ,锁文件可能命名为 database.lck ,其内容不重要,甚至可以为空。当更新完成后,释放锁文件。这种方法依赖于所有进程的协作。
锁区域允许进程锁定数据文件的特定区域。区域由指定起始偏移量的一个或多个字节组成,偏移量可超出当前文件大小。若请求的锁区域与已授予的锁冲突,请求进程将休眠直到冲突解除。
文件锁定在 UNIX 中有两种强制模型:
- 建议锁(Advisory locking):不强制,依赖进程协作维护数据文件完整性。若有进程不遵守锁定约定,可能损坏数据文件。
- 强制锁(Mandatory locking):强制锁定。当进程尝试写入启用强制锁定的文件区域时,其他进程无法干扰,写入进程也会被阻塞直到冲突消失。
2. 锁文件技术
锁文件技术是一种粗粒度的锁定技术,意味着整个文件被锁定。其步骤如下:
1. 尝试创建并打开锁文件。
2. 若步骤 1 失败,休眠一段时间后重复步骤 1。
3. 若步骤 1 成功,则成功锁定资源。
该方法的成功依赖于锁文件的创建和打开操作必须是原子的,即要么完全成功,要么完全失败。可以使用 UNIX 的 open(2)
超级会员免费看
订阅专栏 解锁全文
4162

被折叠的 条评论
为什么被折叠?



