Semaphore, Shared Memory und IPC
Semaphore
&reftitle.intro;
Diese Erweiterungen bieten Schnittstellen zur Nutzung der Unix System V
IPC-Funktionen. Sie unterstützen Semaphore, gemeinsame Speicherbereiche
(Shared Memory) und den Nachrichtenaustausch zwischen Prozessen (Inter
Process Communication - IPC).
Semaphore können genutzt werden, um den exklusiven Zugriff auf eine
Ressource zu koordinieren oder um die Anzahl der gleichzeitigen Zugriffe
auf eine Ressource zu limitieren.
Diese Erweiterungen bieten auch Funktionen zur Nutzung von gemeinsamen
Speicherbereichen. Der gemeinsamen Speicherbereich kann verwendet werden,
um den Zugriff auf globale Variablen zu gewähren. Verschiedene
httpd-Daemons und sogar in anderen Sprachen (&zb; Perl, C, ...)
geschriebene Anwendungen können auf diese Daten zugreifen und so einen
globalen Datenaustausch bereitstellen. Zu beachten ist, dass der gemeinsame
Speicherbereich KEINEN Schutz gegen gleichzeitige Zugriffe bietet. Zur
Synchronisierung sollten Semaphoren verwendet werden.
Durch Unix vorgegebene Limits für den gemeinsamen Speicherbereich
SHMMAX
Die maximale Größe des gemeinsamen Speicherbereichs; üblich sind
131072 Bytes
SHMMIN
Die minimale Größe des gemeinsamen Speicherbereichs; üblich ist 1 Byte
SHMMNI
Die maximale Anzahl von gemeinsamen Speichersegmenten auf dem System;
üblich sind 100
SHMSEG
Die maximale Anzahl von gemeinsamen Speichersegmenten je Prozess;
üblich sind 6
Die Funktionen zum Nachrichtenaustausch können genutzt werden, um
Nachrichten an andere Prozesse zu verschicken oder zu empfangen. Sie bieten
einen einfachen und effektiven Weg zum Datenaustausch zwischen Prozessen,
ohne auf Alternativen wie Unix Domain Sockets zurückgreifen zu müssen.
Nur die Funktionen für gemeinsam genutzten Speicher und
ftok sind unter Windows verfügbar. Weder Semaphoren
noch die Funktionen für prozessübergreifenden Nachrichtenaustausch werden
auf dieser Plattform unterstützt.
&reference.sem.setup;
&reference.sem.constants;
&reference.sem.reference;
&reference.sem.sysvmessagequeue;
&reference.sem.sysvsemaphore;
&reference.sem.sysvsharedmemory;