NiboRoboLib 3.6 - MThread Library
semaphore.h-Dateireferenz

Semaphoren sind die klassische Methode um in Multitasking Systemen auf Resourcen zuzugreifen. Mehr ...

#include "thread.h"

gehe zum Quellcode dieser Datei

Datenstrukturen

struct  semaphore_t
 

Funktionen

void semaphore_init (semaphore_t *semaphore)
 
void semaphore_delete (semaphore_t *semaphore)
 
uint8_t semaphore_acquire (semaphore_t *semaphore, uint16_t timeout)
 Wenn der Wert der Semaphore größer Null ist wird der Wert um ein verringert und der Aufruf kehr erfolgreich zurück. Mehr ...
 
void semaphore_signal (semaphore_t *semaphore)
 Der Wert der Semaphore wird um eins erhöht, falls Threads warten werden sie benachrichtigt.
 
uint8_t semaphore_acquireISR (semaphore_t *semaphore)
 Wenn der Wert der Semaphore größer Null ist wird der Wert um ein verringert und der Aufruf kehr erfolgreich zurück. Mehr ...
 
void semaphore_signalISR (semaphore_t *semaphore)
 Der Wert der Semaphore wird um eins erhöht, falls Threads warten werden sie benachrichtigt.
 

Ausführliche Beschreibung

Semaphoren sind die klassische Methode um in Multitasking Systemen auf Resourcen zuzugreifen.

Jeder signal() Aufruf erzeugt dabei eine virtuelle Resource, jeder acquire() Aufruf verbraucht eine Resource. Sollten gerade keine Resourcen mehr vorhanden sein wartet der acquire() Aufruf solange, bis wieder eine Verfügbar ist. Beispiel: Ein Büro mit 20 Computern und 5 Druckern. Jeder Druckauftrag von einem Computer ist ein signal() Aufruf. Die Drucker warten jeweils mit einem acquire() Aufruf auf einen Auftrag. Kommt ein neuer Druckauftrag dann wird ein acquire() Aufruf erfolgreich zurückkehren. Ist ein Drucker fertig ruft er wieder acquire auf um einen weiteren Auftrag zu bekommen.

Dokumentation der Funktionen

uint8_t semaphore_acquire ( semaphore_t semaphore,
uint16_t  timeout 
)

Wenn der Wert der Semaphore größer Null ist wird der Wert um ein verringert und der Aufruf kehr erfolgreich zurück.

Falls der Wert der Semaphore Null ist wird solange gewartet bis er sich erhöht hat. Sollte die Semaphore innerhalb der gegebenen Zeit nicht aquiriert werden können liefert die Routine eine Null zurück.

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

Wenn der Wert der Semaphore größer Null ist wird der Wert um ein verringert und der Aufruf kehr erfolgreich zurück.

Ansonsten liefert er Null zurück.

Rückgabe
1=Erfolgreich / 0=Fehler