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