当前位置:首页 > PHP > 正文内容

php信号量

高老师5年前 (2021-05-18)PHP999
<?php
//获得信号量的方法
$execute = function () {
    //(1).创建IPC通信KEY
    $key = ftok(__FILE__, 'a');
    //(2).获取一个信号量资源句柄
    $sem_handler = sem_get($key, 1);
    if (sem_acquire($sem_handler, false)) {
        echo '进程' . getmypid() . '获得信号量' . PHP_EOL;
        //模拟业务执行
        sleep(5);
        //释放信号量(sem_get函数默认自动释放)
        sem_release($sem_handler);
    } else {
        echo '进程' . getmypid() . '未获得信号量' . PHP_EOL;
    }
};
//父进程执行函数
$mainFunc = function ($pid) {
    sleep(10);
    echo "10秒后所有进程跟我一起死" . PHP_EOL;
};
//(3).模拟父子进程抢占信号
$pid = pcntl_fork();
if ($pid == -1) {
    throw new Exception('创建子进程失败');
} elseif ($pid) {
    //父进程获取信号量
    $execute();
} else {
    //子进程获取信号量
    $execute();
}

//提示:

//1.sem_get函数默认设置为最多1个进程可以获取信号量,所以实现了锁的效果

//2.配合sem_acquire函数的no_wait参数实现阻塞或者非阻塞

//3.整体的效果和文件锁完全一样,但是比文件锁性能更好

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/200.html

分享给朋友:

“php信号量” 的相关文章

PHP防止SQL注入,PHP防止XSS攻击

PHP防止SQL注入,PHP防止XSS攻击

1.解压后,上传整个文件夹至服务器根目录2.在网站的一个公用文件(如数据库的连接文件)中加入代码:if(is_file($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php')){   &n...

PHP获取原始数据

PHP获取原始数据

在项目中需要对图片进行裁剪,前端裁剪完成发送base64给后端,但是很意外的PHP获取到的数据和前端有点差距,之前我都是先加密,后端解密,但是这次依然不行。于是使用filter_input方法轻松解决。$base64 =  filter_input(INPUT_POST...

php使用swoole扩展推送消息

php使用swoole扩展推送消息

通过http推送消息给socket,socket服务再向客户端推送<?php /*  * Socket推送  * 请用守护进程方式启动php msgservice.php &   (socket只...

PHP getenv函数和putenv函数的学习

PHP getenv函数和putenv函数的学习

(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...

packagist包发布稳定版

packagist包发布稳定版

自己的composer已经发布到packagist,但是无法使用composer require easy-task/easy-task来安装,只能在配置文件使用如下方式安装:"require": {     "easy...

PHP最快方式模拟curl,PHP最快爬虫模拟方法

PHP最快方式模拟curl,PHP最快爬虫模拟方法

有时候我们需要爬一个接口,但是这个接口需要很多参数,包括header和cookie要去编写,使用php curl模拟实在太慢。我们可以通过浏览器的network来复制请求为curl命令。例如我需要模拟请求接口地址:https://www.xkmz.cc/Ajax/Debug/delly,我们只需要在...