为什么 open("file", "w") 不会阻塞?

问题描述

我在使用 NTFS 的 Windows 上,我有 2 个进程以写入模式 (w) 打开同一个文件。我很惊讶地看到,两者都成功了。我错过了什么吗?我认为写模式在句柄上隐式有一个文件锁,直到再次打开文件(除非以共享写模式打开)?

过程 1:

fp = open("file.txt","w")
time.sleep(10000)

过程 2:

fp = open("file.txt","w")
time.sleep(10000)

解决方法

好吧,您的 open() 函数的实现必须将 FILE_SHARED_WRITE 传递给内核。否则,其中一个调用将返回错误,而不是阻塞。