Synchronisierte Funktionen mit PHP

8

Wie können Funktionen in PHP synchronisiert werden, so dass die gleiche Funktion nicht gleichzeitig ausgeführt wird? Der 2. Benutzer muss warten bis der 1. Benutzer mit der Funktion fertig ist. Dann kann der 2. Benutzer die Funktion ausführen.

Danke

    
Techie 19.09.2012, 11:03
quelle

3 Antworten

8

Im Grunde geht es darum, irgendwo ein Flag zu setzen, dass die Funktion gesperrt ist und nicht ausgeführt werden kann, bis der erste Aufrufer von dieser Funktion zurückkehrt. Dies kann auf verschiedene Arten geschehen:

  • Verwenden Sie eine Sperrdatei (die erste Funktion sperrt den Dateinamen "f.lok", die zweite Funktion prüft, ob die Sperrdatei existiert und ausgeführt wird oder nicht auf dieser Auswertung basiert)
  • setzt ein Flag in der Datenbank (nicht empfohlen)
  • benutze Semaphore als @JvdBerg vorgeschlagen (am schnellsten)

Beachten Sie beim Programmieren von konkurrierenden Anwendungen immer die Bedingungen und Deadlocks!

UPDATE mit Semaphoren (nicht getestet):

%Vor%

PHP muss mit sysvsem-Unterstützung kompiliert werden, um sem_ * functions

zu verwenden

Hier ist ein ausführlicheres Tutorial zur Verwendung von Semaphoren in PHP:

Ссылка

    
Vlad Balmos 19.09.2012, 11:10
quelle
9

Sie suchen nach einem Semaphore

Bedenken Sie, dass die Verwendung eines Semaphors (oder eines anderen Blockierungsmechanismus) schwerwiegende Probleme mit der Leistung haben kann, da die Anfragen nicht behandelt werden können, solange das Semaphor aktiv ist.

    
JvdBerg 19.09.2012 11:07
quelle
1

von der Spitze meines Kopfes:

    Die
  • -Funktion prüft, ob ein Datenbankfeld mit dem Namen isFunctionRunning gleich 1 ist. Wenn nicht, starte
  • Sie aktualisieren das Datenbankfeld namens isFunctionRunning auf 1
  • Funktion zaubert hier
  • Sie aktualisieren das Datenbankfeld namens isFunctionRunning auf 0

aber irgendwie denke ich, was du versuchst zu tun ist "falsch" und kann auf andere Weise erreicht werden. könnte helfen, wenn Sie mehr Details gesagt haben

edit: war nicht bewusst, PHP-Semaphoren, die obige Antwort wird viel schneller sein.

    
MIrrorMirror 19.09.2012 11:07
quelle