llinxu强制性锁默认是不开启的,想让linux支持强制性锁,不但在mount的时候需要加上-o mand,而且对
要加锁的文件也需要设置相关权限。
1.建议性锁业称为协同锁,对于这种类型的锁,内核知识提供加减锁以及检测是否加锁的操作,但是不提供锁的控制与
协同工作,也就是说,如果应用程序对某个文件进行操作时,没有检测是否加锁或者
无视加锁而直接向文件写入数据,内核是不会加以阻拦控制的。因此,建议锁,不能阻止进程对文件的操作,
而只能依赖于大家自觉的去检测是否加锁然后约束自己的行为;
2。强制锁:是OS内核的文件锁。每个对文件操作时,例如执行open、read|、write等操作时,OS内部检测该文件是否被加了强制锁
,如果加锁导致这些文件操作失败,也就是内核强制应用程序来遵守游戏规则;
3.由fork产生的子进程不继承父进程所设置的锁。意味着,若一个进程得到一把锁,然后调用fork,那么对于父进程获得锁而言,子进程被视为另一个进程,对于从父进程处继承过来的任一描述符,子进程需要调用fcntl才能获得它自己的锁。
这与锁被歧视为另一个进程,对于从父进程继承过来的任一描述符,子进程需要调用fcntl才能获得
它自己的锁。这与锁的作用是一致的,锁的作用是阻止多个进程同时操作同一个文件,如果子进程
继承父进程的锁,则父子进程操作同一个文件,这与锁的初衷相违背;
4.在执行exec后,新程序可以继承原执行程序的锁,但是注意,如果对一个文件描述符设置了close
-on-exec标志,那么当作为exec的一部分关闭该文件描述符时,对相应的文件的所有锁都被释放。
时间: 2024-10-14 16:33:21