用户A请求系统读取文件foo
,同时用户B想将他或她的数据保存到同一个文件中。在文件系统层面上如何处理这种情况?
用户A请求系统读取文件foo
,同时用户B想将他或她的数据保存到同一个文件中。在文件系统层面上如何处理这种情况?
大多数文件系统(但并非所有)使用锁定来保护对同一文件的并发访问。该锁可以是排他性的,因此第一个获取锁的用户可以访问 - 后续用户会收到“访问被拒绝”的错误。在您的示例场景中,用户A将能够读取文件并获得文件锁,但用户B在用户A读取时将无法写入。
某些文件系统(例如NTFS)允许指定锁定级别,例如允许并发读取器但不允许写入器。还可以进行字节范围锁定。
与数据库不同,文件系统通常不是事务性的,不具备原子性,并且来自不同用户的更改未隔离(如果甚至可以看到更改-锁定可能会禁止此操作。)
使用整个文件锁定是一种粗略的方法,但它将防止不一致的更新。并非所有文件系统都支持整个文件锁定,因此通常的做法是使用锁定文件-通常为空文件,其存在表明其关联的文件正在使用中。(在大多数文件系统上,创建文件是一个原子操作。)