Ich habe den folgenden Code und das Semaphor würde es nicht wie erwartet sperren.PHP-Semaphor funktioniert nicht
(ich bin mir dessen bewusst apc_inc. Das ist nicht das, was ich suche.)
$semkey = sem_get(123);
sem_acquire($semkey);
$count = apc_fetch('count111');
if(!$count) $count = 0;
$count++;
apc_store('count111', $count);
sem_release($semkey);
gefolgt von
ab -n 4000 -c 200 http://localhost/test.php
0 Anfragen fehlgeschlagen.
aber, dass nach einer apc_fetch('count111')
zeigt nur ~ 1200 Treffer
nginx auf Ubuntu 12.04 (64 Bit), PHP 5.3.16 ~ Dotdeb, php-fpm
- Update 1: perfekt auf Werke Linux mint, 5.4.6 ~ dotdeb, eingebauter Webserver. Ich werde die gleiche Maschine mit der gleichen Version mit Nginx versuchen.
Nur um zu verdeutlichen: Ich habe versucht, einen 'apc_inc' Aufruf in den gesperrten Block zu setzen und es wurde 4000 Mal ausgeführt. – Alex
Soweit ich verstehe, blockiert PHP Semaphor Shared Memory und Ressourcen, nicht Code blockieren. Ich glaube, es wird mit den gemeinsamen Shared-Memory-Funktionen arbeiten – Bnaya
Ich nahm an, dass sem_get alle erforderlichen Ressourcen initialisiert und der Quellcode von PHP bestätigt dies ziemlich. Sie haben einen direkten Aufruf zum Posix-Semget, das von dort ausgeht. Semaphore sind außerdem dazu da, Prozesse zu synchronisieren, die ** keinen Speicher teilen. – Alex