我读到类 Unix 系统通常对文件 IO 使用建议锁定,而不是 Microsoft 操作系统使用的强制锁定。如果我理解正确的话,强制锁定文件锁定是由操作系统本身强制执行的。但我没有得到咨询锁定的直觉。以两个进程为例,“A”和“B”正在处理文件“foo”。假设“A”写入“foo”,“B”从“foo”读取。在这种情况下,咨询锁定将如何工作?如果操作系统/文件系统没有对“foo”强制执行锁定,那么如何维护读取和写入的一致性?
答案1
咨询锁定适用于“和平”合作的进程。内核会跟踪锁,但不会强制执行它们 - 由应用程序来遵守它们。这样内核就不需要处理死锁之类的情况。
强制锁定是在 System V Unix 中引入的,但事实证明这个设计并不是最聪明的。 (也就是说,有办法解决它。)如果您需要在 unixy 系统下进行真正的强制锁定之类的操作,请遵循客户端-服务器设计模式,其中服务器是共享资源的权威。