2012-09-13 10 views
24

次のコードがあり、セマフォーは期待通りにロックしません。phpセマフォーが機能しない

(私はapc_incの意識だ。これは私が探しているものではありません。)

ab -n 4000 -c 200 http://localhost/test.php

0要求が失敗したことで、その後

$semkey = sem_get(123); 
sem_acquire($semkey); 

$count = apc_fetch('count111'); 
if(!$count) $count = 0; 
$count++; 
apc_store('count111', $count); 

sem_release($semkey); 

が、その後apc_fetch('count111')は、Ubuntuの12.04(64ビット版)でのみ〜1200本のヒット

nginxの、PHP 5.3.16〜dotdeb、PHP-FPM

  • 更新1を示しています。完璧に動作しますがLinux mint、5.4.6〜dotdeb、Webサーバーに組み込まれています。私はnginxと同じバージョンで同じマシンを試してみるつもりです。
+2

私は、ロックされたブロックの中に 'apc_inc'コールを入れようとしましたが、4000回実行されました。 – Alex

+0

私の知る限り、PHPセマフォは共有メモリとリソースをロックしています。コードブロックではありません。 私はそれがPHP共有メモリ関数で動作すると信じています – Bnaya

+1

私はsem_getが必要なすべてのリソースを初期化し、PHPのソースコードがそれを確認していると思います。彼らはposixのセミットへの直接の呼び出しを持っている、そこから引き継ぐ。また、セマフォは、**メモリを共有しない**プロセスを同期するためのものです。 – Alex

答えて

1

明らかに問題は、セマフォではなくAPC自体であった。
に更新PHP 5.4.8 -1〜dotdeb.0は、nginxと組み込みサーバーテストの両方の問題を解決しました。

関連する問題