Atomic
最后更新于:2022-04-02 06:32:09
# Atomic
[TOC]
swoole\_atomic是swoole扩展提供的原子计数操作类,可以方便整数的无锁原子增减。
* `swoole_atomic`使用共享内存,可以在不同的进程之间操作计数
* `swoole_atomic`基于gcc提供的CPU原子指令,无需加锁
* `swoole_atomic`在服务器程序中必须在`swoole_server->start`前创建才能在Worker进程中使用
* `swoole_atomic`默认使用`32`位无符号类型,如需要`64`有符号整型,可使用`Swoole\Atomic\Long`
**注意:请勿在`onReceive`等回调函数中创建原子数,否则底层的`GlobalMemory`内存会持续增长,造成内存泄漏。**
> `swoole_atomic`在`1.7.19`以上版本可用
> `Swoole\Atomic\Long`在`1.9.20`以上版本可用
## 64位长整型
`1.9.20`版本增加了对64位有符号长整型原子计数的支持。使用`new Swoole\Atomic\Long`来创建。
* `Swoole\Atomic\Long`不支持`wait`和`wakeup`方法
## 使用示例
~~~
$atomic = new swoole_atomic(123);
echo $atomic->add(12)."\n";
echo $atomic->sub(11)."\n";
echo $atomic->cmpset(122, 999)."\n";
echo $atomic->cmpset(124, 999)."\n";
echo $atomic->get()."\n";
~~~
';