24
我有下面的代码和信号量不会像预期的那样锁定它。php信号量不起作用
(我知道apc_inc的,这是不是我要找的。)
$semkey = sem_get(123);
sem_acquire($semkey);
$count = apc_fetch('count111');
if(!$count) $count = 0;
$count++;
apc_store('count111', $count);
sem_release($semkey);
其次
ab -n 4000 -c 200 http://localhost/test.php
0请求失败。
但在这之后的apc_fetch('count111')
仅示出了〜1200命中
在Ubuntu 12.04(64位),PHP 5.3.16〜dotdeb,PHP-FPM nginx的
- 更新1:工作完全上Linux mint,5.4.6〜dotdeb,内置web服务器。我要用nginx试用同一版本的机器。
只是为了澄清:我试图把一个'apc_inc'调用放在锁定块中,并且它全部执行了4000次。 – Alex
据我了解PHP信号量是锁定共享内存和资源,而不是代码块。 我相信它将与PHP共享内存功能 – Bnaya
一起工作我假设sem_get初始化了所有必需的资源,PHP的源代码几乎证实了这一点。他们直接打电话给posix的semget,从那里开始。此外,信号量是同步进程**,不**共享任何内存。 – Alex