gpt4 book ai didi

locking - glibc 中的 flock() 与 fcntl() 语义

转载 作者:行者123 更新时间:2023-12-05 04:01:33 24 4
gpt4 key购买 nike

相关:one , two

据说 flock()(BSD 锁)和 fcntl()(POSIX 记录级锁)为用户提供了不兼容的语义,特别是关于锁定释放。

但是,在 glibc 中,flock() 是根据 POSIX fcntl() 实现的。 (我在官方 git repo 上检查过这个,这里只是一个可见的链接)

https://code.woboq.org/userspace/glibc/sysdeps/posix/flock.c.html#18

/* This file implements the flock' function in terms of the POSIX.1fcntl' locking mechanism. In 4BSD, these are two incompatible locking mechanisms, perhaps with different semantics? */

这些事实如何结合在一起?

最佳答案

在 Linux 上,flock is a system call . flock 锁和fcntl 锁是独立的,不会相互干扰(至少在本地文件系统上)。

glibc 源文件 sysdeps/posix/flock.c 实际上并没有在 Linux 上使用。真正的实现是从 sysdeps/unix/sysv/linux/syscalls.list 中的这一行生成的系统调用包装器:

flock             -       flock           i:ii    __flock         flock

OFD 锁是另一种锁,但它们确实与 POSIX 记录锁交互。然而,它们在多线程时有更合理的行为,关闭一个描述符不会释放同一进程持有的同一底层文件的所有锁(这使得 POSIX 记录锁定很难在多线程进程中使用)。

关于locking - glibc 中的 flock() 与 fcntl() 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55283821/

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