我使用以下C++函数锁定服务器通过SMB共享的文件的1字节:
在Windows上:
LockFileEx (h, LOCKFILE_FAIL_IMMEDIATELY | LOCKFILE_EXCLUSIVE_LOCK, 0, 1,0, &overlapped)在Linux和Mac上:
fcntl (fd, F_SETLK, &flockdesc)对于本地共享的文件和在SMB上共享的文件,我在3微秒内获得了成功的锁,而对于通过NFS共享的文件,我在26毫秒内成功地锁定了文件。
我无法理解进程如何通过网络在3微秒内获得锁,因为要与服务器通信至少需要几毫秒的时间,在NFS上共享文件的情况下可以观察到这一点。
有人能帮我弄清楚为什么会发生这种事吗?
发布于 2023-04-17 20:54:00
之所以发生这种情况,是因为Windows使用oplocks锁定-> https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/oplock-overview
https://serverfault.com/questions/1104556
复制相似问题