PHP文件锁

技术文档网 2021-04-15

共享锁(LOCK_SH)

什么时候加共享锁?

当在读取数据的时候同时进行着其他的写操作,这个时候需要对文件加共享锁,否则无论有没有对写操作加写锁都会写入成功,导致数据不一致
当文件获得共享锁时,其他的写操作会堵塞

独占锁(LOCK_EX)

什么时候加独占锁?

当多个写操作同时进行时,如果不加锁,最终的数据可能是混乱的
当文件获得独占锁时,只有文件写操作完成之前,其他的读写操作都会堵塞

文件锁的使用?

#写操作1
<?php
$fp=fopen("data.txt","r+");
if(flock($fp,LOCK_EX)){
    $data=fgets($fp);
    fwrite($fp,"hello");
    sleep(10);
    flock($fp,LOCK_UN);
}else{
    echo "unable get lock";
}
fclose($fp);
?>

#写操作2
<?php
$fp=fopen("data.txt","r+");
if(flock($fp,LOCK_EX)){
    $data=fgets($fp);
    fwrite($fp," hi");
    sleep(10);
    flock($fp,LOCK_UN);
}else{
    echo "unable get lock";
}
fclose($fp);
?>

#读操作
<?php
$fp=fopen("data.txt","r+");
if(flock($fp,LOCK_SH)){
    echo $data=fgets($fp);
    sleep(10);
    flock($fp,LOCK_UN);
}else{
    echo "unable get lock";
}
fclose($fp);
?>

#读取到的数据为:
hello hi

相关文章

  1. 如何通过xhprof分析性能

    使用方法 xhprof_enable(); /** ... 要检查的php代码 ... **/ $xhprof_data = xhprof_disable(); // 引入xhprof_lib i

  2. LUMEN API Controller 规范

    1. 第三方依赖库规范 在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范 dingo/api : 实现API接口库 vlucas/phpdo

  3. PHP文件锁

    共享锁(LOCK_SH) 什么时候加共享锁? 当在读取数据的时候同时进行着其他的写操作,这个时候需要对文件加共享锁,否则无论有没有对写操作加写锁都会写入成功,导致数据不一致 当文件获得共享锁时,其他

  4. Hello-Risen-程序

    首先需要说明的是,您下载到的文件包含两部分,其中src中是开发源码,用于对Risen框架本身的开发,risen 目录中是通过源码生成的包含debug和release版本的框架程序,用于您应用程序的开发

  5. PHP自定义类示例(Weixin消息解析类)

    PHP自定义类示例(Weixin消息解析类) /** * Created by Qingger. * User: jsspf * Date: 2017/3/24 * Time: 10:50

随机推荐

  1. 如何通过xhprof分析性能

    使用方法 xhprof_enable(); /** ... 要检查的php代码 ... **/ $xhprof_data = xhprof_disable(); // 引入xhprof_lib i

  2. LUMEN API Controller 规范

    1. 第三方依赖库规范 在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范 dingo/api : 实现API接口库 vlucas/phpdo

  3. PHP文件锁

    共享锁(LOCK_SH) 什么时候加共享锁? 当在读取数据的时候同时进行着其他的写操作,这个时候需要对文件加共享锁,否则无论有没有对写操作加写锁都会写入成功,导致数据不一致 当文件获得共享锁时,其他

  4. Hello-Risen-程序

    首先需要说明的是,您下载到的文件包含两部分,其中src中是开发源码,用于对Risen框架本身的开发,risen 目录中是通过源码生成的包含debug和release版本的框架程序,用于您应用程序的开发

  5. PHP自定义类示例(Weixin消息解析类)

    PHP自定义类示例(Weixin消息解析类) /** * Created by Qingger. * User: jsspf * Date: 2017/3/24 * Time: 10:50