Beschreibung | Der objektorientierte Funktionsbaustein MUTEX wird verwendet, um den Zugriff auf gemeinsame Ressourcen (Shared Resources) über mehrere Tasks hinweg zu verwalten. Er wird verwendet, um den Zugang zu diesen gemeinsamen Ressourcen gegenseitig auszuschließen. Der FB verhindert Race Conditions, Datenbeschädigungen oder unerwartetes Verhalten, wenn mehrere Tasks gleichzeitig auf gemeinsame Ressourcen zugreifen.
So funktioniert ein Mutex
Ein Mutex dient als Sperrmechanismus für Tasks, die gemeinsame Daten verwenden. Ein Mutex hat einen gesperrten und einen entsperrten Zustand. Wenn ein Task auf gemeinsam genutzte Daten zugreifen will, muss er zunächst den Mutex erwerben. Wenn der Mutex nicht von einem anderen Task gesperrt ist, sperrt der Task den Mutex und setzt die Ausführung fort. Falls der Mutex bereits von einem anderen Task gesperrt ist, wartet der anfordernde Task darauf, dass der Mutex wieder freigegeben wird. Der Task wird blockiert, bis der Mutex freigegeben wird. Tasks, die sich im Wartezustand befinden, werden der Mutex-Warteschlange hinzugefügt. Nach Abschluss der Operation an den gemeinsamen Daten gibt der Task den Mutex frei (entsperrt ihn), so dass andere Tasks ihn erwerben und auf die gemeinsamen Daten zugreifen können.
Hinweis
Im Falle einer Mutex-Sperre kann ein Task-Watchdog ausgelöst werden. Es wird daher empfohlen, eine TRYLOCK-Methode anstelle einer LOCK-Methode zu verwenden. |
Der Funktionsbaustein bietet die folgenden Methoden, die für die Interaktion mit einem Mutex verwendet werden:
- LOCKSperrt den Mutex (wird Besitzer des Mutex). Wenn der Mutex bereits von einem anderen Task gesperrt ist, wartet der Task (wird blockiert), bis er wieder verfügbar ist (d.h. von einem anderen Task entsperrt wurde).
Hinweis
Im Falle einer Mutex-Sperre kann ein Task-Watchdog ausgelöst werden. Es wird daher empfohlen, eine TRYLOCK-Methode anstelle einer LOCK-Methode zu verwenden. |
- UNLOCKEntsperrt den Mutex, so dass der nächste wartende Task der Besitzer des Mutex werden kann (um ihn zu sperren).Muss immer nach einem erfolgreichen TRYLOCK oder LOCK aufgerufen werden (Rückgabewert TRUE).
Hinweis
Nur der Task, der den Mutex gesperrt hat, kann ihn wieder entsperren. |
- TRYLOCKVersucht, den Mutex zu sperren (um Besitzer des Mutex zu werden). Er prüft, ob der Mutex verfügbar ist:
- Wenn ja, wird der Mutex gesperrt und TRUE zurückgegeben.
- Wenn nein, wird sofort FALSE zurückgegeben, ohne zu warten.
- IS_ENTEREDÜberprüft, ob der aktuelle Task die Sperre für den angegebenen Mutex hält.
- TRUE = Task hat den Mutex gesperrt
- FALSE = Task hat den Mutex nicht gesperrt.
|