[PHP]flock文件IO锁的使用
一、flock概述
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
参数
handle
文件的指针,由 fopen() 创建的 resource (资源);
operation
operation 可以是以下其中一个值:
1. LOCK_SH 取得共享锁,该锁只能用于读取文件
2. LOCK_EX 取得排他锁,该锁可以读写文件
3. LOCK_UN 解除锁定(无论是共享还是排他)
wouldblock
这是一个引用类型,上锁后如果其他进程访问此资源会阻塞,此变量将会设为true,注意:windows不支持此功能;
二,锁类型的差异
一切关于计算机对资源访问的锁定,都是基于进程而言的,进程给资源上锁的行为,可以抽象的理解为进程试图获得对该资源的操作权限,一旦获取操作权限,其他进程想要同时操作该资源时,必须等待该进程操作完成释放操作权限,其他进程才能对此资源进行操作,此概念可以防止资源争用冲突导致的各种不可预知的行为;
一般而言,资源锁只分为两种,共享锁和排他锁,也通俗地被称为读锁和写锁,再通过这两种锁型,衍生出各种概念性的锁定场景,在这里就不在讨论范围内了;
来看看两种锁定的概念;
共享锁:当一个进程给某个资源加上共享锁,其他进程同一时间内,也可以把该资源加上自己的共享锁,但是如果某进程需要向该进程加上排他锁的时候就需要等待所有的共享锁释放之后的事了,这个其间进程被阻塞以等待所有共享锁释放;
排他锁:当一个进程给某个资源加上了排他锁,其他进程需要再往这个资源添加锁定的时候(无论共享锁还是排他锁),都需要等待此排他锁释放后,这个其间进程被阻塞已等待该排他锁释放;
三、特性
flock是一种协议型锁定,它不是强制性的,也就是说,某种情况下,当一个进程没有按照约定在操作文件之前调用flock获取锁,它依然可以在没有获取锁的前提下操作文件,无论是读取或者是写入,所以flock并不可靠
上面说的某种情况下,究竟是哪种情况? wouldblock 参数被检测为0时,不过windows,并不支持这一检测,所以为了安全起见,最好遵守约定,在所有操作文件的前提时都相约先获取锁;
[PHP]flock文件IO锁的使用的更多相关文章
- 17、文件IO详解及实例
上篇文章已经讲过了文件系统的一些基本的概念,这里首先对文件IO进行详细的学习,文件IO也称为系统调用IO,是操作系统为"用户态"运行的进程和硬件交互提供的一组接口,即操作系统内核留 ...
- 文件IO大纲
文件流与文件描述符的区别 a) 任何进程在运行时都默认打开3个流对象,(stdin, stdout, stderr)它们都有对应的文件描述符,其文件描述符分别为0,1,2,以后打开的文件描述符的值一般 ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- 2.Linux文件IO编程
2.1Linux文件IO概述 2.1.0POSIX规范 POSIX:(Portable Operating System Interface)可移植操作系统接口规范. 由IEEE制定,是为了提高UNI ...
- [11]APUE:(文件)记录锁
[a] 概念 建议锁:在遵循相同记录锁规则的进程间生效,通常用于保证某个程序自身多个进程间的数据一致性 强制锁:意在保证所有进程间的数据一致性,但不一定有效:如不能应对先 unlink 后建立同名副本 ...
- 转 漫谈linux文件IO
在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...
- 漫谈linux文件IO
在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...
- <摘录>linux文件IO
这篇文章写的比较全面,也浅显易懂,备份下.转载自:http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的 ...
- C3 文件IO:APUE 笔记
C3:文件IO 1 引言 本章描述的函数被成为不带缓冲的IO,涉及5个函数:open.read.write.lseek.close. 文件控制:dup.sync.fsync.fdatasync.fcn ...
随机推荐
- vue-cli3 第三版安装搭建项目
Vue CLI是一个用于快速Vue.js开发的完整系统 3.X较2.X结构变了很多,更优雅,开发体验更好 官方:https://cli.vuejs.org/guide/ 安装:https://cli. ...
- SQL Server循环——游标、表变量、临时表
游标 在游标逐行处理过程中,当需要处理的记录数较大,而且游标处理位于数据库事务内时,速度非常慢. -- 声明变量 DECLARE @Id AS Int -- 声明游标 DECLARE C_Id CUR ...
- Java8新特性_接口中的默认方法
默认方法由来猜想 1. Collection接口.Collections公共类. 同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ...
- Javascript面向对象特性实现封装、继承、接口详细案例
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
- sqlserver 循环取时间
declare @str date; set @str='2015-01-08'; while DATEDIFF([day], @str , '2015-02-01')>0 begin sele ...
- JavaScript面试技巧(一):基础知识
1.变量类型和计算 变量类型:值类型.引用类型.typeof运算符. 变量计算:字符串拼接.==运算符.if语句.逻辑运算符 2.原型和原型链 构造函数 5个原型规则 3.作用域和闭包-执行上下文 4 ...
- Empirical Evaluation of Speaker Adaptation on DNN based Acoustic Model
DNN声学模型说话人自适应的经验性评估 年3月27日 发表于:Sound (cs.SD); Computation and Language (cs.CL); Audio and Speech Pro ...
- python中前后端通信方法Ajax和ORM映射(form表单提交)
后端从数据库获取数据给到前端: 第一种方式: admin.py文件代码: @admin.route('/showList') def show(): # 获取数据库所有文章数据,得到一个个对象 res ...
- 5-5 re模块 正则表达式
1,正则表达式 正则表达式,就是匹配字符串内容的一种规则. 官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字 ...
- Liunx/RHEL6.5 Oracle11 安装记录
1.创建用户组 groupadd oinstall #创建用户组oinstall groupadd dba #创建用户组dba useradd -g oinstall -g dba -m oracle ...