NiboRoboLib 3.6 - MThread Library
mutex.h-Dateireferenz

Mit einem Mutex kann eine einzelne Resource vor gleichzeitigem Zugriff geschützt werden. Mehr ...

#include "thread.h"

gehe zum Quellcode dieser Datei

Datenstrukturen

struct  mutex_t
 

Funktionen

void mutext_init (mutex_t *mutex)
 Mutex initialisieren.
 
void mutext_delete (mutex_t *mutex)
 
uint8_t mutext_lock (mutex_t *mutex, uint16_t timeout)
 Nach dem Erfolgreichen Aufruf dieser Funktion gehört der Mutext dem aufrufenden Thread. Mehr ...
 
void mutext_unlock (mutex_t *mutex)
 Freigabe des Mutex. Mehr ...
 
uint8_t mutext_lockISR (mutex_t *mutex)
 Nach dem Erfolgreichen Aufruf dieser Funktion gehört der Mutext dem Interrupt. Mehr ...
 
void mutext_unlockISR (mutex_t *mutex)
 Freigabe des Mutex. Mehr ...
 

Ausführliche Beschreibung

Mit einem Mutex kann eine einzelne Resource vor gleichzeitigem Zugriff geschützt werden.

Es gibt immer höchstens einen Besitzer, der den Mutex "gelockt" hat! Erst nach einem "unlock" kann ein anderer Thread auf den Mutex zugreifen.

Dokumentation der Funktionen

uint8_t mutext_lock ( mutex_t mutex,
uint16_t  timeout 
)

Nach dem Erfolgreichen Aufruf dieser Funktion gehört der Mutext dem aufrufenden Thread.

Andere Threads die mutext_lock aufrufen müssen solange warten bis der Mutex wieder freigegeben wird. Der Besitzende Thread darf die Funktion mehrmals aufrufen, der Mutex wird dann erst wieder freigegeben wenn mutext_unlock genausooft aufgerufen wurde.

Parameter
timeout,:Wert in Ticks / TO_POLL (nicht warten) / TO_INF (ewig warten)
Rückgabe
1=Erfolgreich / 0=Fehler
uint8_t mutext_lockISR ( mutex_t mutex)

Nach dem Erfolgreichen Aufruf dieser Funktion gehört der Mutext dem Interrupt.

Die Funktion kehrt direkt mit dem Ergebnis zurück ob der Mutex gelockt werden konnte. Andere Threads die mutext_lock aufrufen müssen solange warten bis der Mutex wieder freigegeben wird. Der Interrupt darf die Funktion mehrmals aufrufen, der Mutex wird jedoch erst wieder freigegeben wenn mutext_unlockISR genausooft aufgerufen wurde.

void mutext_unlock ( mutex_t mutex)

Freigabe des Mutex.

Falls mutext_lock vom besitzenden Thread mehrfach aufgerufen wurde muss auch die Funktion mutext_unlock mehrfach aufgerufen werden!

void mutext_unlockISR ( mutex_t mutex)

Freigabe des Mutex.

Falls mutext_lock vom Interrupt mehrfach aufgerufen wurde muss auch die Funktion mutext_unlockISR mehrfach aufgerufen werden!