ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# swoole_atomic->wait 当原子计数的值为`0`时程序进入等待状态。另外一个进程调用`wakeup`可以再次唤醒程序。底层基于`Linux Futex`实现,使用此特性,可以仅用`4`字节内存实现一个等待、通知、锁的功能。 ```php function swoole_atomic->wait(float $timeout = -1) : bool ``` > 在不支持`Futex`的平台下,底层会使用循环`usleep(1000)`模拟实现 * `$timeout` 指定超时时间,默认为`-1`,表示永不超时,会持续等待直到有其他进程唤醒 * 超时返回`false`,错误码为`EAGAIN`,可使用`swoole_errno`函数获取 * 成功返回`true`,表示有其他进程通过`wakeup`成功唤醒了当前的锁 * 使用`wait/wakeup`特性时,原子计数的值只能为`0`或`1`,否则会导致无法正常使用 * 当然原子计数的值为`1`时,表示不需要进入等待状态,资源当前就是可用。`wait`函数会立即返回`true` 使用方法 ---- ```php $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"; } ```