apc_cas()函数的实际用法是什么?


What is the real usage of apc_cas() function?

我想知道我需要在PHP中使用apc_cas函数的真实生活示例。

计数器就是一个简单的例子。假设我们有一个键counter和一个增加计数器的函数(注意,这将更适合apc_inc函数,但让我们一起玩):

function incCounter(){
    //Get the current value increment and set
    $c = apc_fetch('counter');
    $c++;
    apc_store('counter',$c);
}

然而,上面有一个问题。如果同时发生两个请求,它们将获得相同的$c值并增加它,这意味着计数器将只增加1。

使用apc_cas可以保证你要更新的值是旧的,并且它在此期间没有被更改。

确保没有其他人更新该键中的值。因为这个原因,你必须传递$old值。如果当前值与您所知道的键值(在本例中为$old)不同,则不会更新键并返回false。

键库数据库中常用的http://en.wikipedia.org/wiki/Compare-and-swap的实现