windows 上的独占文件锁定,缓慢

Exclusive file lock on windows, slowness

我正在尝试使用独占文件锁定作为不同主机上进程 运行 之间的锁定。大多数时候它工作正常。它要么成功,要么 returns ERROR_SHARING_VIOLATION 在一个循环中,我这样做:

CreateFileW(name,
    FILE_APPEND_DATA,
    FILE_SHARE_DELETE,
    NULL,
    OPEN_ALWAYS,      // open or create
    FILE_FLAG_DELETE_ON_CLOSE,  // delete at close file
    NULL);

定期 returns ERROR_ACCESS_DENIED 但重试成功。

问题: 在极少数情况下: 打开文件时启动的进程堆栈: 假设有几个成功了,但其余的(20 个进程)卡住了很长一段时间(50 分钟) 锁定文件可见且时间戳已更新。

然后一个进程通过,在稍后的某个时刻,所有提醒进程在相对较短的时间内(例如几秒钟)成功通过

那么 2 个问题

  1. 如何解决此类行为?
  2. 小问题:为什么 ERROR_ACCESS_DENIED 返回?

谢谢。

环境:

ACCESS_DENIED 可能是这样的:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

If you call CreateFile on a file that is pending deletion as a result of a previous call to DeleteFile, the function fails. The operating system delays file deletion until all handles to the file are closed. GetLastError returns ERROR_ACCESS_DENIED.

你不调用 DeleteFile,但你做同样的事情。

您没有完全指出您观察到的行为中不受欢迎的部分是什么。我猜 Creates 会卡住——在这种情况下,我建议您尝试添加 FILE_COMPLETE_IF_OPLOCKED 标志。

您可能会受到影响的另一件事是隧道和关闭时删除。检查此 https://support.microsoft.com/en-us/kb/172190。所以禁用隧道,看看它给你带来了什么。

要进一步诊断,您可能需要 运行 在受影响的客户端和包含受影响的 SMB 共享的服务器上进行 procmon 跟踪。