[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 ...
 
随机推荐
- Python获取下载速度并显示进度条
			
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys import time from urllib import request ''' urll ...
 - 保存页面数据的场所----Hidden、ViewState、ControlState
			
1.使用隐藏域Session.Application和Cache都是保存在服务器内存中的.一般来说我们是无权访问客户端的机器,把数据直接保存在客户端的(Cookie是一个例外,不过Cookie只能保存 ...
 - position:fixed 失效
			
如果position:fixed 失效,那应该是你设置position的元素的父元素中有设置了transform属性哦 . 把 transform删除或设置为none就可以解决啦. 但是如果trans ...
 - luogu 2827 蚯蚓 单调队列/优先队列
			
易知可利用优先队列选取最大值: 但是通过分析可知,先取出的蚯蚓分开后仍然要比后分的长,所以可直接利用单调队列找队头即可,分三个单调队列,分别找未切割,切割,切割2三种情况 #include<bi ...
 - linux(Cnetos7)安装jdk和tomcatmysql,tomcat
			
mysqllinux版本的地址 安装包下载 下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13-1.el6.x86_64.rp ...
 - python前后端加密方式
			
后端加密方法: python后端加密方式: # 双重工加密 #bytes((7788).encode('utf-8')):为后端加密二把手,多加的锁,该参数可为空,必须加bytes才能实现 md5pa ...
 - 高德地图  location字段控制台显示 为字符串类型 实际为对象
			
help大神求指导 ? 高德地图new amap.PoiManager() 的 autoComplete方法 location字段控制台显示 为字符串类型 实际为对象 debugger过程入下图:
 - linux学习记录.6.vscode调试c makefile
			
参考 https://www.cnblogs.com/lidabo/p/5888997.html task有更新,不能使用文章的代码. 多文件 终端 touch main.c hw.c hw.h vs ...
 - 在已有的Java项目中使用Kotlin
			
需要配置两个地方首先在项目点gradle文件中引入Kotlin插件 然后在module的build.gradle文件中应用插件
 - 用NAME_N带入NAME 让显示格式变为  姓名(类型),类型在数据库中是1和0,显示效果为姓名(1),SQL写法
			
select xxxx T.PROJECT_NAME||'('||DECODE(T.PROJECT_TYPE,'1','收入','2','支出','3','挂账')||')' PROJECT_NAME ...