- Atomic
- 使用
- 例子
Atomic
swoole_atomic是swoole扩展提供的原子计数操作类,可以方便整数的无锁原子增减。
swoole_atomic使用共享内存,可以在不同的进程之间操作计数swoole_atomic基于gcc提供的CPU原子指令,无需加锁swoole_atomic在服务器程序中必须在swoole_server->start前创建才能在Worker进程中使用swoole_atomic默认使用32位无符号类型,如需要64有符号整型,可使用Swoole\Atomic\Long
注意:请勿在onReceive等回调函数中创建原子数,否则底层的GlobalMemory内存会持续增长,造成内存泄漏。
使用
初始化计数:
- int
init_value初始值
public function __construct($init_value)
增加计数:
- int
add_value增加的值
public function add($add_value)
减少计数:
- int
sub_value减少的值
public function sub($sub_value)
获取当前计数的值:
public function get()
将当前值设置为指定的数字:
- int
value计数值
public function set($value)
如果当前数值等于参数1,则将当前数值设置为参数2:
- int
cmp_value被做比较的值 - int
set_value当前数值等于被做比较的值后被设置为指定的计数值
public function cmpset($cmp_value, $set_value)
例子
在EasySwooleEvent初始化函数注册atomic对象。
// 注册一个atomic对象AtomicManager::getInstance()->add('second');
从AtomicManager获取atomic对象并使用。
<?php/*** Created by PhpStorm.* User: Tioncico* Date: 2019/3/18 0018* Time: 15:39*/namespace App\HttpController;use EasySwoole\Component\AtomicManager;use EasySwoole\Http\AbstractInterface\Controller;class Index extends Controller{function index(){AtomicManager::getInstance()->add('second',0);$atomic = AtomicManager::getInstance()->get('second');$atomic->add(1);$this->response()->write($atomic->get());// TODO: Implement index() method.}}
