4D v14.3Semaphore |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
Semaphore
Semaphore
Eine Semaphore ist ein Flag, das auf Arbeitsstationen oder in Prozessen auf einer Arbeitsstation bekannt ist. Eine Semaphore ist entweder vorhanden oder nicht vorhanden. Die Methoden, die ein Benutzer einsetzt, können testen, ob eine Semaphore vorhanden ist. Methoden können durch Erstellen und Testen von Semaphoren mit den Arbeitsstationen kommunizieren. Die Funktion Semaphore gibt TRUE zurück und führt nichts aus, wenn Semaphorenname vorhanden ist. Ist Semaphorenname nicht vorhanden, legt Semaphore die Semaphore an und gibt FALSE zurück. Eine Semaphore kann immer nur ein Benutzer gleichzeitig erstellen. Wird FALSE zurückgegeben, heißt das einerseits, dass die Semaphore nicht vorhanden war, andererseits aber auch, dass die Semaphore bereits für den Prozess gesetzt wurde, der sie aufgerufen hat. Mit dem optionalen Parameter ZähleTick geben Sie eine Wartezeit in Ticks an, wenn Semaphorenname bereits gesetzt wurde. In diesem Fall wartet die Funktion entweder, bis die Semaphore freigegeben oder die Wartezeit abgelaufen ist und gibt erst dann True zurück. Es gibt zwei Arten von Semaphoren:
Globale und lokale Semaphoren funktionieren nach derselben Logik. Der Unterschied liegt in ihrer Reichweite. Im Client/Server Modus werden globale Semaphoren von allen Prozessen auf allen Clients und Servern gemeinsam genutzt. Eine lokale Semaphore wird nur von Prozessen auf dem Rechner genutzt, wo sie erzeugt wurde. Hinweis: Wir empfehlen, zum Verwalten lokaler Aspekte für den Client einer Anwendung, wie z.B. die Oberfläche oder ein Array mit Interprozessvariablen, lokale Semaphoren zu verwenden. Verwenden Sie dafür globale Semaphoren, verursacht das nicht nur unnötigen Austausch über das Netzwerk, sondern kann auch andere Client-Rechner beeinträchtigen. Über eine lokale Semaphore können Sie solche unerwünschten Nebenwirkungen vermeiden. Verwenden Sie keine Semaphoren, um den Zugriff auf Datensätze zu verwalten. Das erledigen 4D und 4D Server automatisch. Setzen Sie Semaphoren ein, damit nicht mehrere Benutzer gleichzeitig dieselbe Operation ausführen können. In diesem Beispiel wollen Sie verhindern, dass zwei Benutzer gleichzeitig die Preise in einer Produktetabelle global aktualisieren können. Schreiben Sie dazu folgende Methode: If(Semaphore("UpdatePrices")) ` Versuche die Semaphore zu erstellen Folgendes Beispiel verwendet eine lokale Semaphore. Sie wollen in einer Datenbank mit mehreren Prozessen eine To-do Liste aufrechterhalten. Sie soll in einem Interprozess-Array und nicht in einer Tabelle verwaltet werden. Über eine Semaphore verhindern Sie den gleichzeitigen Zugriff. Für diesen Fall benötigen Sie nur eine lokale Semaphore, da nur ein Arbeitsplatz mit der To-Do Liste arbeitet. Das Interprozess-Array wird in der Startup Methode initialisiert: ARRAY TEXT(◊ToDoList;0) ` Die To-Do Liste ist zuerst leer Mit dieser Methode fügen Sie Einträge in die To-do Liste ein: ` Projektmethode ADD TO DO LIST Obige Methode können Sie von jedem Prozess aus aufrufen. Diese Methode ermöglicht, eine Methode bei vorhandener Semaphore nicht auszuführen; die Methode informiert die aufrufende Methode mit Fehlernummer und Text. Syntax: $L_Error:=Semaphore_proof(->$T_Text_error) // Schützende Struktur über Semaphoren |
EIGENSCHAFTEN
Produkt: 4D
GESCHICHTE
Geändert: 4D v11 SQL SIEHE AUCH
CLEAR SEMAPHORE ARTIKELVERWENDUNG
4D Programmiersprache ( 4D v12.4) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||