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;