• 技术文章 >后端开发 >PHP问题

    PHP有锁吗

    王林王林2019-10-19 17:41:34原创2514

    文件锁

    这类锁比较常见,例如 mysql, php-fpm 启动之后都会有一个pid文件记录了进程id,这个文件就是文件锁。

    这个锁可以防止重复运行一个进程,例如在使用crontab时,限定每一分钟执行一个任务,但这个进程运行时间可能超过一分钟,如果不用进程锁解决冲突的话两个进程一起执行就会有问题。

    使用PID文件锁还有一个好处,方便进程向自己发停止或者重启信号。例如重启php-fpm的命令为:

    kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

    发送USR2信号给pid文件记录的进程,信号属于进程通信,会另开一个篇幅。

    互斥锁和读写锁

    sync模块中的Mutex:

    Mutex是一个组合词,mutual exclusion。用pecl安装一下sync模块, pecl install sync。 文档中的SyncMutex只有两个方法,lock 和 unlock。

    sync模块中的读写锁:

    SyncReaderWriter的方法类似,readlock, readunlock, writelock, writeunlock成对出现即可。

    sync模块中的Event:

    感觉和golang中的Cond比较像,wait()阻塞,fire()唤醒Event阻塞的一个进程。有一篇好文介绍了Cond, 可以看出Cond就是锁的一种固定用法,SyncEvent也一样。php文档中的例子显示,fire()方法貌似可以用在web应用中。

    sync模块中的信号量:

    SyncSemaphore文档中显示,它和Mutex的不同之处,在于Semaphore一次可以被多个进程(或线程)得到,而Mutex一次只能被一个得到。所以在SyncSemaphore的构造函数中,有一个参数指定信号量可以被多少进程得到。

    推荐教程:PHP视频教程

    以上就是PHP有锁吗的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php
    上一篇:php有数据库连接池吗 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php文件锁死锁怎么办• php开发如何避免死锁• php开发如何避免文件死锁• php需要用到mysql锁么
    1/1

    PHP中文网