我想知道我需要在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的实现