XCI. 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
,
dass
gemeinsame
Speichersegmente
keinen
Schutze
vor
konkurrierenden
gleichzeitigen
Zugriffen
bieten
.
Benutzen
Sie
Semaphore
für
die
Koordination
solcher
Zugriffe
.
Tabelle
1
.
|
Maximalgröße
eines
gemeinsamen
Speicherbereichs
,
üblich
sind
131072
Byte
(
128KB
)
|
|
Minimalgröße
eines
gemeinsamen
Speicherbereichs
,
normalerweise
1
Byte
|
|
maximale
Anzahl
unterschiedlicher
Speichersegmente
,
üblich
sind
100
|
|
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