有没有办法知道当前进程是否持有特定的文件锁?

时间:2019-06-14 10:13:56

标签: winapi

我们有一系列在Windows上运行的应用程序,它们使用文件锁定来保护对数据(网络驱动器上的共享文件)的并发访问。

有时,这些进程之一似乎无法释放这些锁之一,并且一切冻结,直到该进程被杀死。找出谁拥有该锁并不总是一件容易的事(需要管理员进入文件服务器并检查网络打开的文件,进入一个工作站,查找进程并杀死它)。

我们有一个由后台线程提供服务的应用程序之间的消息队列系统,因此,从理论上讲,有可能向每个进程发送一条消息,询问它们是否对特定文件持有锁定以及是否这样做的话,如果锁的持有时间超过几秒钟,我将采取诸如杀死进程的操作。

所以,问题是:线程是否有办法知道同一进程的不同线程是否针对给定文件持有锁(LockFile)?

1 个答案:

答案 0 :(得分:0)

我不确定是否有用于查询此内容的API,但是进程可以使用LockFileEx函数进行查询:

  

如果两个锁都是使用同一文件句柄创建的,则共享锁可以与排他锁重叠。当共享锁与排他锁重叠时,唯一可能的访问是锁所有者进行的读取。

另一个线程可以查询并查看它是否可以共享访问。


如果控制文件格式,则每次锁定时都可以将计算机名和进程ID写入文件的开头。即使文件被锁定,文件内存映射也可以查看文件内容。

相关问题