最近的工作需要在cache层加一个lock的机制,google了一些资料发现apc没有实现(好像eAccelerator有,没用过),只有自己整一个,用apc实现也比较简单
protected static function isMutex($key)
{
if (ApcCache::exists("MUTEX_" . $key)) return true;
return false;
}
protected static function lock($key)
{
return ApcCache::add("MUTEX_" . $key, true, 1);
}
protected static function unlock($key)
{
return ApcCache::remove("MUTEX_" . $key);
}
底层有个对apccache的封装,使用一个1秒的缓存来测试mutex
使用一个简单的python脚本测试了下,实现能够满足要求
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from multiprocessing import Process
import urllib
def read(i):
# print i,"in read"
f = urllib.urlopen("http://help/index/testmulti?param=%s" % i)
data = f.read()
print data
if __name__ == '__main__':
p = []
for i in range(300):
p.append(Process(target=read, args=(i,)))
for c in p:
c.start()