多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# swoole\_atomic->wait [TOC] 当原子计数的值为`0`时程序进入等待状态。另外一个进程调用`wakeup`可以再次唤醒程序。底层基于`Linux Futex`实现,使用此特性,可以仅用`4`字节内存实现一个等待、通知、锁的功能。 ~~~ function swoole_atomic->wait(float $timeout = 1.0) : bool ~~~ > 在不支持`Futex`的平台下,底层会使用循环`usleep(1000)`模拟实现 * `$timeout`指定超时时间,默认为`1秒`。设置为`-1`时表示永不超时,会持续等待直到有其他进程唤醒 * 超时返回`false`,错误码为`EAGAIN`,可使用`swoole_errno`函数获取 * 成功返回`true`,表示有其他进程通过`wakeup`成功唤醒了当前的锁 * 使用`wait/wakeup`特性时,原子计数的值只能为`0`或`1`,否则会导致无法正常使用 * 当然原子计数的值为`1`时,表示不需要进入等待状态,资源当前就是可用。`wait`函数会立即返回`true` ## 使用方法 ~~~ $n = new swoole_atomic; if (pcntl_fork() > 0) { echo "master start\n"; $n->wait(1.5); echo "master end\n"; } else { echo "child start\n"; sleep(1); $n->wakeup(); echo "child end\n"; } ~~~