XC. Semaphor und Shared Memory Funktionen
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, das gemeinsame
Speichersegmente keinen Schutze vor konkurierenden gleichzeitigen
Zugriffen bieten. Benutzen Sie Semaphore für die Koordination
solcher Zugriffe.
Tabelle 1. 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
|
Beispiel 1. 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);
?> |
|
- Inhaltsverzeichnis
- ftok --
Convert a pathname and a project identifier to a System V IPC key
- msg_get_queue --
Create or attach to a message queue
- msg_receive --
Receive a message from a message queue
- msg_remove_queue --
Destroy a message queue
- msg_send --
Send a message to a message queue
- msg_set_queue --
Set information in the message queue data structure
- msg_stat_queue --
Returns information from the message queue data structure
- sem_acquire -- Zugriff auf einen Semaphore anfordern
- sem_get -- Liefert ein Semaphore-Handle
- sem_release -- Freigabe eines angeforderten Semaphores
- sem_remove -- Remove a semaphore
- shm_attach --
Anlegen oder anbinden eines gemeinsamen Speichersegments
- shm_detach --
Beenden der Anbindung an ein gemeinsames Speichersegment
- shm_get_var --
Liest einen in einem gemeinsamen Speicherbereich
angelegten Wert.
- shm_put_var --
Aktualisiert einen in einem gemeinsamen Speicherbereich
angelegten Wert.
- shm_remove_var --
Entfernt einen in einem gemeinsamen Speicherbereich
angelegten Wert.
- shm_remove -- Entfernt ein gemeinsames Speichersegment