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

php信号量

高老师5年前 (2021-05-18)PHP984
<?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计算两个字符串的相似度

PHP计算两个字符串的相似度

<?php echo similar_text("Hello World","Hello Shanghai"); ?> 2.计算两个字符串的相似度,并返回百分比 <?php similar_text("...

php经纬度计算距离

php经纬度计算距离

/**  * 计算两点地理坐标之间的距离  * @param  Decimal $longitude1 起点经度  * @param  Decimal $lati...

PHP中Session文件过多的解决方法

PHP中Session文件过多的解决方法

PHP的session文件夹默认保存在同一个文件,随着访客的增多,访问的速度会非常慢,例如部分管理系统后台每天登陆1000次,1个月就创建了30000个session文件,一年后是多少?假设这个系统的用户是上万人呢?方法1:每个网站使用自己的session文件夹,代码如下:<?php $pat...

抛弃salt,使用password_hash()加密

抛弃salt,使用password_hash()加密

md5/sha1+salt方式是目前各大cms常用的加密方式,虽然salt安全,但是各大md5网站也在研究这个方向,那么我们应该选择password_hash动态hash来助力,一种密码有多种hash结果.看代码模拟登陆.<?php //01.注册 $user ='zhang...

php迭代器学习

php迭代器学习

php官方已经提供了Iterator(迭代器)接口,通过网上资料的学习,目前看适合超大集合或者数组提取使用。学习一个函数的实现对比内存占用差距.使用迭代器和普通循环实现range()函数。(1).普通循环实现range()函数。function newrange($low, $h...

PHP获取站点根目录,PHP获取应用根目录,cgi和cli都支持

PHP获取站点根目录,PHP获取应用根目录,cgi和cli都支持

重构框架的时候想要考虑支持下cli模式,于是参考了thinkphp的底层。/**  * 获取应用根目录  * @return string  */ public static function getRootP...