Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux上的多线程文件区域锁定_Linux_File_Locking - Fatal编程技术网

Linux上的多线程文件区域锁定

Linux上的多线程文件区域锁定,linux,file,locking,Linux,File,Locking,关于fcntl的Linux手册页说明如下: 除了被一个显式的F_UNLCK移除外,当进程终止或关闭任何引用锁所在文件的文件描述符时,记录锁也会自动释放。这是不好的:这意味着当库函数出于某种原因决定打开、读取和关闭文件(如/etc/passwd或/etc/mtab)时,进程可能会丢失对该文件的锁定 我的情况:我的文件是逐渐编写的,随着内容的添加,一些索引表也在更新。同时,可以读取现有内容。所以我需要一个细粒度的文件锁。写入文件的组件可能位于同一进程或单独的进程中,但它们知道并发使用,因此建议锁定是

关于fcntl的Linux手册页说明如下:

除了被一个显式的F_UNLCK移除外,当进程终止或关闭任何引用锁所在文件的文件描述符时,记录锁也会自动释放。这是不好的:这意味着当库函数出于某种原因决定打开、读取和关闭文件(如/etc/passwd或/etc/mtab)时,进程可能会丢失对该文件的锁定

我的情况:我的文件是逐渐编写的,随着内容的添加,一些索引表也在更新。同时,可以读取现有内容。所以我需要一个细粒度的文件锁。写入文件的组件可能位于同一进程或单独的进程中,但它们知道并发使用,因此建议锁定是可以的。该实现是来自Windows的端口,其中使用了LockFileEx

这种“糟糕”的情况是否有可能改善?同时,如何在一个进程内实现可控的文件锁定?当然,我希望避免自己实现每个文件区域的锁定寄存器。对文件保留一个共享句柄,该句柄可以引导所有访问,但需要进行重大的体系结构更改