php进程(线程)通信基础之System V共享内存简单实例分析


Posted in PHP onNovember 09, 2019

本文实例讲述了php进程(线程)通信基础之System V共享内存。分享给大家供大家参考,具体如下:

PHP默认情况没有开启功能,要支持该功能在编译PHP的时候要加入下面几个选项  System V消息,--enable-sysvmsg   System V信号量支持,--enable-sysvsem  System V共享内存支持,--enable-sysvshm

PHP还挺shmop共享内存,在编译的时候开启 --enable-shmop

System V共享内存的相关函数:

1: 创建信号量唯一标识符

$ftok = ftok(__FILE__, 'a');

2: 创建共享内存端

$id = shm_attach ( $ftok, 1000 , 0666 )

3: 断开与共享内存段的连接

shm_detach ( $id )

4: 获取一个变量值

$val = shm_get_var ( $id , $key )

5: 检测变量是否存在

shm_has_var ( $id , $key )

6: 添加一个值到共享内存里

shm_put_var ( $id , $key , $val )

7: 从共享内存中删除一个变量

shm_remove_var ( $id , $key )

8: 从系统中删除共享内存

shm_remove ( $id)
<?php
$tmp = tempnam(__FILE__, 'PHP');
$key = ftok($tmp, 'a');
$shmid = shm_attach($key);
$counter = 0;
shm_put_var( $shmid, 1, $counter );
class CounterThread extends Thread {
 public $shmid;
 public $is_runing = true;
 public function __construct($shmid){
  $this->shmid = $shmid;
 }
 public function run() {
  $counter = shm_get_var( $this->shmid, 1 );
  $counter++;
  shm_put_var( $this->shmid, 1, $counter );
  printf("Thread #%lu says: %s\n", $this->getThreadId(),$counter);
 }
}
for ($i=0;$i<10;$i++){
 $threads[] = new CounterThread($shmid);
}
for ($i=0;$i<10;$i++){
 $threads[$i]->start();
}
for ($i=0;$i<10;$i++){
 $threads[$i]->join();
}
shm_remove( $shmid );
shm_detach( $shmid );

php进程(线程)通信基础之System V共享内存简单实例分析

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
我常用的几个类
Oct 09 PHP
网站当前的在线人数
Oct 09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
PHP Class&amp;Object -- 解析PHP实现二叉树
Jun 25 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
Jul 03 PHP
php读取本地文件常用函数(fopen与file_get_contents)
Sep 09 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
深入理解PHP中的count函数
May 31 PHP
php array_keys 返回数组的键名
Oct 25 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
php 中的信号处理操作实例详解
Mar 04 PHP
PHP多进程简单实例小结
Nov 09 #PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 #PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 #PHP
基于thinkphp6.0的success、error实现方法
Nov 05 #PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 #PHP
详解Laravel服务容器的绑定与解析
Nov 05 #PHP
php+laravel依赖注入知识点总结
Nov 04 #PHP
You might like
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
深入php内核之php in array
2015/11/10 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
python实现list由于numpy array的转换
2018/04/04 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
python基于socket函数实现端口扫描
2020/05/28 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
介绍一下grep命令的使用
2012/06/28 面试题
Python制作表白爱心合集
2022/01/22 Python
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA
Python使用Web框架Flask开发项目
2022/06/01 Python