GlobalData 组件客户端 cas

2017-03-10 10:36:02
cas(要求Workerman版本>=3 3 0)bool GlobalData Client::cas(string $key, mixed $old_value, mixed $new_value)原子替换,用$new_v

(要求Workerman版本>=3.3.0)

bool \GlobalData\Client::cas(string $key, mixed $old_value, mixed $new_value)

参数

键值。(例如$global->abcabc就是键值)

老数据

新数据

替换成功返回true,否则返回false。

多进程同时操作同一个共享变量时,有时候要考虑并发问题。

以上由于读取和设置不是一个原子操作,导致并发问题。
要解决这种并发问题,可以使用cas原子替换接口。
cas接口在改变一个值之前,
会根据$old_value判断这个值是否被其它进程更改过,
如果有更改,则不替换,返回false。否则替换返回true。
见下面示例。

范例

require_once __DIR__ . '/../src/Client.php';

$global = new GlobalData\Client('127.0.0.1:2207');

// 初始化列表
$global->user_list = array(1,2,3);

// 向user_list原子添加一个值
do
{
    $old_value = $new_value = $global->user_list;
    $new_value[] = 4;
}
while(!$global->cas('user_list', $old_value, $new_value));

var_export($global->user_list);

相关词搜索:cas

上一篇:GlobalData 组件客户端 add
下一篇:GlobalData 组件客户端 increment