一、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锁的使用的更多相关文章

  1. 17、文件IO详解及实例

    上篇文章已经讲过了文件系统的一些基本的概念,这里首先对文件IO进行详细的学习,文件IO也称为系统调用IO,是操作系统为"用户态"运行的进程和硬件交互提供的一组接口,即操作系统内核留 ...

  2. 文件IO大纲

    文件流与文件描述符的区别 a) 任何进程在运行时都默认打开3个流对象,(stdin, stdout, stderr)它们都有对应的文件描述符,其文件描述符分别为0,1,2,以后打开的文件描述符的值一般 ...

  3. 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程

    前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...

  4. 2.Linux文件IO编程

    2.1Linux文件IO概述 2.1.0POSIX规范 POSIX:(Portable Operating System Interface)可移植操作系统接口规范. 由IEEE制定,是为了提高UNI ...

  5. [11]APUE:(文件)记录锁

    [a] 概念 建议锁:在遵循相同记录锁规则的进程间生效,通常用于保证某个程序自身多个进程间的数据一致性 强制锁:意在保证所有进程间的数据一致性,但不一定有效:如不能应对先 unlink 后建立同名副本 ...

  6. 转 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  7. 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  8. <摘录>linux文件IO

    这篇文章写的比较全面,也浅显易懂,备份下.转载自:http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的 ...

  9. C3 文件IO:APUE 笔记

    C3:文件IO 1 引言 本章描述的函数被成为不带缓冲的IO,涉及5个函数:open.read.write.lseek.close. 文件控制:dup.sync.fsync.fdatasync.fcn ...

随机推荐

  1. MySQL随记(一)

    数据类型 Insert Update Delete 函数

  2. C#一例绘制字体不清晰的解决办法

    public static Bitmap GetPieWithText(String text, Color color, Color fontColor,Font font) { ; Bitmap ...

  3. Android 常见异常及解决办法

    Ø  前言 本文主要记录 Android 的常见异常及解决办法,以备以后遇到相同问题时可以快速解决. 1.   java.lang.NullPointerException: Attempt to i ...

  4. 持续集成CI相关的几个概念

    持续集成 https://en.wikipedia.org/wiki/Continuous_integration 为什么要持续? 持续集成, 可以避免集成地狱(由于工作的源码 和 库中的源码的差异导 ...

  5. Java爬网页数据,并存储到本地数据库中

    由于开发一个人工智能项目,需要强大的后台数据库加持,所以,没有办法,又是需要医疗数据,只能自己爬某医疗网站数据,进行分析,但是由于不同网站的结构不一样,所以这个程序只能爬该网站的,第一次爬网页数据,自 ...

  6. solr 中文分词器IKAnalyzer和拼音分词器pinyin

    solr分词过程: Solr Admin中,选择Analysis,在FieldType中,选择text_en 左边框输入 “冬天到了天气冷了小明不想上学去了”,点击右边的按钮,发现对每个字都进行分词. ...

  7. tensorflow/core/kernels/conv_ops.cc:659] check failed: stream->parent()->getc

    tensorflow版本与cudnn版本不对应,如tensorflow-gpu==1.1.0,cudnn==6.0 升级tensorflow-gpu到更高版本

  8. jQuery.extend 函数使用

    JQuery的extend扩展方法:      Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解.      一.Jquery的扩展方 ...

  9. 【译】第七篇 SQL Server安全跨数据库所有权链接

    本篇文章是SQL Server安全系列的第七篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  10. 2018JAVA面试题附答案

    JAVA基础 JAVA中的几种基本类型,各占用多少字节? String能被继承吗?为什么? 不可以,因为String类有final修饰符,而final不能被继承的,实现细节不允许改变.平常我们定义的S ...