记录锁 – 字节范围锁

当一个进程正在读或修改文件的某个部分时,使用记录锁可以阻止其他进程修改同一文件区;对 Unix 系统来说,更准确的术语可能是字节范围锁。

Posix 标准规定了 fcntl() 函数用以获取记录锁,函数原型如下所示:

#include <fcntl.h&gt;
int fcntl(int fd, int cmd, .../* struct flock *flockptr */);

记录锁的自动继承和释放规则

记录锁与进程和文件两者相关联。其一,当一进程终止时,它所建立的锁全部释放;其二,当文件描述符被关闭时,该进程通过此描述符引用的对应文件上设置的锁都会被释放,同一文件的所有的文件描述符都指向了相同的文件表项,关闭其中的任意一个描述符就会释放属于该进程的所有描述符打开的锁。

由 fork 产生的子进程不继承父进程设置的锁,子进程只会拿到一个文件描述符,需要在子进程内获取文件锁。

执行 exec 后,新程序可以继承原执行程序的锁。

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理