' schrieb:Benutze an jeder Stelle, an der Du die Semphore benutzen möchtest, das VI "Obtain Semaphore Reference" und einen Namen für die Semaphore. So musst Du nix über Variablen oder Drähten verteilen und hast eine Reference auf die Semaphore.
Also erstens sollte man zu jedem Create Semaphore auch ein Destroy Semaphore tun. Die Semaphore selber ist zwar bedingt durch den Namen immer dieselbe aber sie merkt sich wie oft jemand sie "obtained" hat und wird erst wirklich freigegeben wenn die Applikation abgeschlossen wird oder wenn die letzte Referenz geschlossen wird. Zudem verbraucht jede Referenz auf eine Semaphore oder andere Objekte etwas Speicher für die Referenz selber.
Zweitens sollte an einer Stelle am Anfang in der Applikation eine entsprechende "named" Semaphore erzeugt werden die erst am Ende der Applikation wieder freigegeben wird. Das stellt sicher das diese Semaohore im Speicher bleibt auch wenn sie anderenorts regelmässig erzeugt und wieder freigegeben wird.
Drittens muss die erste Erstellung der Semaphore an einer Stelle im Program sein die Objekt nicht mehr nötig ist. Das gilt übrigens für alle refnum based Objekte in LabVIEW. Erstellen davon in einem Hierarchy Context der irgendwann Idle wird, hat automatisch die zwangsweise Zerstörung des entsprechenden Objektes zur Folge auch wenn diese Objekt irgendwo anders etwa durch globale Variablen noch verwendet wird.
Rolf Kalbermatter