<?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...
在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型.和其他语言有点差距.(1).在值类型中我们直接使用&符号表示指向对应变量的内存地址,当前变量和被指向的变量只要有1个的值被修改都会直接影响另外一个变量的值发生变化。(ps:还是非常节省内存的,可以使用...
面试中PHP面试官会问调用一个不存在的方法,如何知道是哪个文件哪行调用的?假设方法是getWorkLoad()回答1:开启PHP错误输出,PHP会输出Fatal error: Call to undefined function getWorkLoad() in D:\wwwroot\thinkpa...
(1).学习的目标:学会创建父子进程,并且能够区分当前进程是父还是子;了解父进程执行过程,子进程执行过程;能够用多进程执行任务(2).相关函数学习: (2.1)pcntl_fork()执行时: &nbs...
php7新增的特性(1).强制限制只能返回一种类型<?php class task { } //must return an integer function add(): int { &nb...
在项目下的composer配置文件修改(PaySdk是我这里一个支付sdk的目录,包含各种各样的支付sdk,这样写的意思让composer自动把PaySdk下的所有文件自动加载):"autoload": { &...