首页 >后端开发 >PHP问题 >PHP有锁吗

PHP有锁吗

王林
王林原创
2019-10-10 11:52:534092浏览

PHP有锁吗

文件锁

这类锁比较常见,例如 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