建议性锁和强制性锁的区别

zz/2024/7/23 5:31:41

       建议性锁:

所谓建议性锁就是假定人们都会遵守某些规则去干一件事。例如,人与车看到红灯都会停,而看到绿灯才会继续走,我们可以称红绿等为建议锁。但这只是一种规则而已,你并不防止某些人强闯红灯。而强制性锁是你想闯红灯也闯不了。

建议性锁只在cooperating processes之间才有用,对cooperating process的理解是最重要的,它指的是会影响其它进程的进程或被别的进程所影响的进程,举两个例子:(1)我们可以同时在两个窗口中运行同一个命令,对同一个文件进行操作,那么这两个进程就是cooperating processes;(2)cat file| sort,那么cat和sort产生的进程就是使用了pipe的cooperating processes。

     强制性锁:

      强制性锁是由内核执行的。当文件被上锁来进行写入操作时,在锁定该文件的进程释放该锁之前,内核会阻止任何对该文件的读或写访问,每次读或写访问都得检查锁是否存在。

1.如果想要打开一个有强制性记录锁的文件,而且open函数中指定了O_TRUNC时,即便没有指定O_NONBLOCKopen调用也会立即出错返回,errno置为EAGAIN

2.强制性锁可以避开。但意义不大,原理是创建个新文件,并删除(unlink不受强制性影响)原有的文件。

3.强制性锁虽然解决非协作进程来捣乱的问题,但是,对于多个进程更新共享文件时,对共享数据仍需要某种锁。



http://www.ngui.cc/zz/2769452.html

相关文章

C/C++的类型安全

什么是类型安全? 类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容…

嵌入式动态内存分配过程

参考:http://blog.chinaunix.net/space.php?uid20312618&doblog&cuid1815216 一、概述: 动态内存分配,特别是开发者经常接触的Malloc/Free接口的实现,对许多开发者来说,是一个永远的话题,而且有时…

阿里HR筛选简历

上周发了一个阿里内推的帖子,没想到短时间内就收到了成百上千封简历。 我仔仔细细地看了每一封简历,附带有Github地址的我也点进去仔细看了代码。 最终我留下了30%的简历,而且这30%中只有10%的本科生。 所有通过内推初步筛选的小伙伴会在8月3…

点到线段的最短距离——矢量法

最近在看recast&detour源码的时候有遇到许多数学上的算法问题,特此记录,以便以后查看。 矢量法推导: 求点P到线段AB的最短距离。分成以下三种情况(a),(b),(c)。 (勘误:dPC 应该是在 ∠PAB和∠PBA都小于90的情况…

Restore IP Addresses---LeetCode

题目要求:输入一串字符串,输出可能组成的ip地址。 先申请题意,弄清需求: 会存在不是数字的字符串吗?都是数字 10.10.10.01 最后一个01,符合要求吗?不符合要求。 leetcode上的示例答案&#x…

Recast Detour 寻路引擎学习建议

1.初步了解Recast&Detour,完成工程的下载和生成运行 http://www.stevefsp.org/projects/rcndoc/prod/index.html 2.了解Recast-导航数据的创建 看源代码中的Sample_SoloMesh.handleBuild 函数 http://www.critterai.org/projects/nmgen_study/overview.html 此英文文档…

Failed to load Assets/Plugins/xxx.dll with error

遇到这个错误,首先检查看提示的路径下面是否真的有 xxx.dll 如果有,那就是这个dll所引用的其他的库你电脑上没有,本地电脑的环境问题,把相关的dll拷贝到系统目录或者特定的目录下就可。 如何查看你缺少什么库: 下载一…

std::lambda小记

目录 不同形式的语法说明 [ capture ] 例子 lambda是C11中才引入的新特性,能定义匿名对象,而不必定义独立的函数和函数对象。 在介绍函数对象的for_each例子中,如果不用创建函数对象,可以使用下面 std::for_each(dest.begin()…

std::bind小记

当std::bind函数(是一个函数模版),用来绑定函数的某些参数并生成一个新的std::function对象。 如何来确定绑定的是函数的第几个参数,引入std::placeholders命名空间: _1,函数调用的第一个参数, _2第2个参…

win10 ‘XXX’不是内部或者外部命令,也不是可执行的程序

比如说 ‘Python’不是内部或者外部命令,也不是可执行的程序 比如说 ‘svn ’不是内部或者外部命令,也不是可执行的程序 没有给可执行程序设置Path环境变量 如下图进行 我的电脑右键选择属性,然后依此选择。把需要执行的exe,比如…