博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
加锁解锁PHP实现 -转载
阅读量:4490 次
发布时间:2019-06-08

本文共 680 字,大约阅读时间需要 2 分钟。

PHP并没有完善的线程支持,甚至部署到基于线程模型的httpd服务器都会产生一些问题,但即使是多进程模型下的PHP,也难免出现多进程共同访问同一资源的情况。

比如整个程序共享的数据缓存,或者因为资源受限而必须对特定处理过程进行排队,以及针对每个用户生成唯一的某种标识的情形。

PHP语言自身没有提供进程互斥和锁定机制,因而使得在这些情况下的编程遇到了困难,目前了解到的可选的办法有以下这些:

   1 利用MySQL的锁定机制来实现互斥。缺点是增大了数据库服务器的连接负担,并且使得程序依赖于数据库服务才能正常工作。
   2 利用文件锁机制。 也就是利用flock函数通过文件实现锁定和互斥机制,来模拟通用编程模型下的锁定原语的工作方式。这种方式在以前以纯文本文件为存储引擎的时代成为保护 数据完整性的必备元素,现在在使用文本文件作为缓存媒介的场合也相当常见。PmWiki应该也是使用了这个机制来对多人同时编辑一个页面的情形进行提醒。 不过文件锁机制多少会调用到宿主操作系统上的文件锁特性,因此在使用时一定要检查服务器操作系统是否为PHP环境提供了完善可靠的文件锁机制。
   3 利用共享内存空间计数。 PHP可以利用shmop_open函数开辟一块内存空间,在服务进程之间共享数据,为了保证共享数据的互斥安全访问,可以使用sem_get、 sem_acquire和sem_release这组函数实现共享计数锁定机制。这种办法在后台实际是调用了系统的ipc 服务来实现。

转载于:https://www.cnblogs.com/wellsoho/p/5166195.html

你可能感兴趣的文章
C语言的宏macro的使用
查看>>
如何设置树莓派 -Zero 自启动连接WIFI
查看>>
Raspberrypi 安装完MySQL之后登录不了(ERROR 1698 (28000))
查看>>
1 Linux输入子系统
查看>>
2linux输入子系统-按键驱动程序
查看>>
3 linux bus-drv-dev模型 LED驱动实验
查看>>
4 linux lcd驱动框架分析
查看>>
5 linux lcd驱动程序编写
查看>>
6 linux 触摸屏驱动程序
查看>>
一键部署springboot到Docker
查看>>
Java并发面试题
查看>>
ActiveMQ
查看>>
Java并发-并发工具类JUC
查看>>
Java并发多线程
查看>>
Mysql知识点与笔记
查看>>
Spring线程池(异步、同步)
查看>>
Spring线程池ThreadPoolTaskExecutor的配置和使用
查看>>
c++实现简单计算器
查看>>
使用node-static运行vue打包文件dist
查看>>
切换路由时取消全部或者部分axios请求,并将一些从不需要取消的加入白名单...
查看>>