[Inhalt] [Zurück] [Weiter] [Thema] [Index]

CreateSem()


Syntax:

CreateSem (String semname, Real timeout) : Bool
semname: Name der Semaphore
timeout: Wartezeit in Sekunden

Beispiel:

CreateSem ("callisto.sem", 20)

Beschreibung:

Prüft, ob eine Semaphore angelegt werden kann, und legt sie an.

Semaphoren werden benutzt, um geteilten Zugriff auf Ressourcen (z.B. dbf-Dateien) zwischen mehreren nebenläufigen Prozessen zu gewährleisten. Diese Prozesse können auf verschiedenen Rechnern laufen, daher ist die Semaphore eine Datei (und kein Eintrag im Speicher).

Wenn semname noch nicht existiert, wird sie angelegt. Die Überprüfung und das Anlegen werden in einem echt atomaren Schritt durchgeführt (mittels Hardlinks, also auch unter NFS lauffähig). So ist sichergestellt, dass zwischen Überprüfen und Anlegen kein anderer Prozess die Semaphore anlegen kann.

Falls semname schon existiert, ein anderer Prozess also Zugriff auf die Ressource beansprucht, wird gewartet, bis die Semaphore wieder gelöscht wird, höchstens aber timeout Sekunden. Dieses Timeout verhindert, dass die Prozesse unendlich lange aufeinander warten, wenn ein anderer Prozess stirbt, während er die Ressource benutzt (Lifelock des eigenen Prozesses).

Nach dem Aufruf ist die Semaphore angelegt, die Ressource also beansprucht.

Das Rückgabeergebnis ist in der Regel False, es sei denn, das Timeout wurde erreicht, dann ist es True.

Diese Funktion arbeitet nur korrekt, wenn Schreibrechte auf das aktuelle Verzeichnis existieren. Unter MS-Windows funktioniert diese Funktion nicht.



toposoft 28.03.2024