PHP进程通信基础之信号量与共享内存通信
|
由于进程之间谁先执行并不确定,这取决于内核的进程调度算法,其中比较复杂。由此有可能多进程在相同的时间内同时访问共享内存,从而造成不可预料的错误。信号量这个名字起的令人莫名其妙,但是看其英文原意,就十分容易理解。 semaphore 英[ˈseməfɔ:(r)] vt. 发出信号,打旗语; 类似于指挥官的作用。 下面我们看下一个伪代码信号量的使用。 1、创建信号量唯一标识符
2、创建信号量资源ID
3、接受信号量
4、释放信号量
5、销毁信号量
举个不文雅的例子,使我们容易理解这个信号量在生活中的用法。理解之后可以套用到我们编程领域。 一家公司只有一个卫生间。那么当有人上厕所的时候,都要获取一把锁(信号量),表示卫生间正在使用。代码如下:
那么员工上完厕所之后,就需要将锁打开,释放锁(信号量),表示现在可以允许别人使用。代码如下:
通过一个简单的锁,我们就能够知道当前的厕所(共享内存)是否可以使用。这个例子不雅观,但说明了问题。这篇博客也是有味道的博客,真是不容易。。。。以下是示例代码: //var_dump($shm_id);die(); resource(4) of type (sysvshm)const SHARE_KEY = 1; $child_list = []; //加入信号量 //$signal resource(5) of type (sysvsem) for ($i = 0; $i < 3; $i++) {
} else { while (count($child_list) > 0) { $count = shm_get_var($shm_id,SHARE_KEY); //销毁信号量 shm_remove($shm_id); (编辑:日照站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- php – 模拟所有DateTime实例用于测试的时间.
- laravel5 使用try catch的实例详解
- Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
- php curl 模拟登录并获取数据实例详解
- Zend Framework上传文件重命名的实现方法
- yii2项目实战之restful api授权验证详解
- PHP中include()与require()的区别说明
- 解决PHP程序运行时:Fatal error: Maximum execution time
- PHP学习:PHP获取redis里不存在的6位随机数应用示例【设置2
- 利用Laravel生成Gravatar头像地址的优雅方法
