gpt4 book ai didi

c++ - 第二次检查后 flock lock 丢失

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:39 26 4
gpt4 key购买 nike

我正在使用 flock 来防止对共享资源的并发访问。第一次检查锁时它工作正常,但第二次检查锁时,尽管锁仍然被另一个进程持有,但我能够成功获得它。

我正在使用以下代码:

#include <stdio.h>
#include <sys/file.h>
#include <errno.h>
int main(void) {

printf("App started:\n");

int fd = open("test.lock", O_RDWR | O_CREAT, 0666); // open or create lockfile
//check open success...
int rc = flock(fd, LOCK_EX | LOCK_NB); // grab exclusive lock, fail if can't obtain.
if (rc)
{
printf("Failed .. lock is already held\n");
if(EWOULDBLOCK == errno)
{
printf("errno said, that we would block\n");
}
return 0;
}
else
{
printf("Lock obtained\n");
}

printf("Press ENTER...\n");
getc(stdin);
return 0;
}

平台:OSX 10.10。

如果我在两个独立的终端窗口中运行该程序,我会得到以下输出:

第一个窗口 - 应用程序获取锁并等待按键

App started: Lock obtained Press ENTER...

第二个终端窗口第一次运行 - 应用程序成功发现锁已经被其他人持有

App started: Failed .. lock is already held errno said, that we would block

第二个终端窗口第二次运行 - 尽管第一个实例已经持有它,但应用程序获得了锁

App started: Lock obtained Press ENTER...

就好像测试锁也会释放它一样......

有什么想法吗?

更新:这看起来像是与 OS X 相关的问题。该代码在 14.04 32 位上没有问题。马特拉

最佳答案

事实证明,OS X 上的问题是程序是从网络挂载目录(windows 共享)运行的。锁在 NFS 上不能可靠地工作。参见 https://stackoverflow.com/a/22411531/174638了解详情。

关于c++ - 第二次检查后 flock lock 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33739651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com