<?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.整体的效果和文件锁完全一样,但是比文件锁性能更好
(1).创建数据库test ,创建表shop(字段id,total),商品id是1,商品总数10 (2).PHP模拟购买,商品数量大于0才能购买<?php //连接数据库 $con=mysqli_connect("192.168.2.18...
如果想在windows中执行php,并且让php脚本在后台运行,可以用下面的cmd命令start /b php D:\wwwroot\default\demo1\run.php例如上面的命令意思后台运行run.php,如果想用php编写异步代码: ...
PHP不像net支持多继承,自身只支持单继承,为了解决这个问题,php出了Trait这个特性,减少单继承语言的限制。并且能让代码复用率更高。说白了就是一个对象的属性和方法扩展工具一样。例如:trait exts { public f...
面试中PHP面试官会问调用一个不存在的方法,如何知道是哪个文件哪行调用的?假设方法是getWorkLoad()回答1:开启PHP错误输出,PHP会输出Fatal error: Call to undefined function getWorkLoad() in D:\wwwroot\thinkpa...
(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...
【一】.迭代器迭代是指反复执行一个过程,每执行一次叫做一次迭代。比如下面的代码就叫做迭代:1. <?php 2. $data = ['1', '2', &...