使用QLockFile :: setStaleLockTime()但锁定不会变得陈旧?

时间:2016-01-09 14:30:22

标签: c++ qt locking

我使用此代码将失效锁定时间设置为100毫秒:

QLockFile lock1(fn);
lock1.setStaleLockTime(100);
QVERIFY(lock1.lock());

QLockFile lock2(fn);
lock2.setStaleLockTime(100);
QVERIFY(lock2.lock());

我预计它会阻止只有100毫秒,但它会无限期地阻塞。那是为什么?

我误解了锁文件应该如何变得陈旧?这是what the docs say

  

staleLockTime的值由lock()和tryLock()使用,以确定何时将现有锁定文件视为过时,即由崩溃的进程遗留。这对于PID同时被重用的情况很有用,因此检测过时锁定文件的一种方法是它已经存在了很长时间。

1 个答案:

答案 0 :(得分:1)

你误解了一些事情

  

如果持有锁的进程崩溃,则锁文件将保留在磁盘上   并且可以阻止任何其他进程访问共享资源,   永远。出于这个原因,QLockFile尝试检测这种“陈旧”锁定   文件,基于写入文件的进程ID。覆盖   同时进程ID被重用的情况,当前   进程名称与对应的进程名称进行比较   来自锁文件的进程ID。如果进程名称不同,则   锁定文件被认为是陈旧的。另外,最后一次修改   锁定文件的时间(默认为30秒,对于a的用例)   短期操作)被考虑在内。如果锁定文件是   发现是陈旧的,它将被删除。

因此,不仅staleLockTime而且还检查了进程ID和其他内容。所以你不能这样使用这种方法。