Semaphor und Shared Memory Funktionen
Semaphore
Dieses Modul bietet Unterstützung für die Nutzung von Semaphoren
und gemeinamen Speichersegmenten mit Hilfe der UNIX System V
Mechanismen zur Interprozess-Kommunikation.
Mit Hilfe von Semaphoren kann der exklusive Zugriff auf Resourcen
eines Systems sichergestellt oder die Anzahl der Prozesse begrenzt
werden, die gleichzeitig eine bestimmte Systemresource nutzen.
Mit Hilfe gemeinsamer Speichersegmente (shared memory) können
system-globale Variablen angelegt und bereitgestellt werden.
Diese Speicherbereiche stehen allen Prozessen des Systems,
insbesondere aber allen parallel laufenden PHP-Instanzen
zum Datenaustausch zur Verfügung. Beachten Sie bitte, dass gemeinsame
Speichersegmente keinen Schutze vor konkurrierenden gleichzeitigen
Zugriffen bieten. Benutzen Sie Semaphore für die Koordination
solcher Zugriffe.
Limits of Shared Memory by the Unix OS
SHMMAX
Maximalgröße eines gemeinsamen Speicherbereichs,
üblich sind 131072 Byte (128KB)
SHMMIN
Minimalgröße eines gemeinsamen Speicherbereichs,
normalerweise 1 Byte
SHMMNI
maximale Anzahl unterschiedlicher Speichersegmente,
üblich sind 100
SHMSEG
Anzahl der Speichersegmente, die ein einzelner Prozess
einbinden darf, üblich sind 6
Koordinierter Zugriff auf gemeinsamen Speicher
<?php
// gemeinsames Speichersegment beschaffen
if(! ($mkey = shm_attach(0x2328,1024,OctDec("666"))))
{ echo "shmem_attach fehlgeschlagen<br>\n"; exit;}
// Semaphor für Zugriffskoordination auf
// Speichersegment beschaffen
if(! ($skey = sem_get(0x2328,1,OctDec("666"))))
{ echo "sem_get fehlgeschlagen<br>\n"; exit;}
// Zugriff anfordern
if(! sem_acquire($skey))
{ echo "sem_acquire fehlgeschlagen<br>\n"; exit;}
// Wert lesen, aktualisieren und schreiben
$val = @shm_get_var($mkey,1);
if($val===false) $val=1; else $val++;
print "new value is $val<br>\n";
shm_put_var($mkey,1,$val);
// Zugriff freigeben
sem_release($skey);
?>
&reference.sem.functions;