e_sleep_thread-Kernel-Service
Zweck
Erzwingt, dass der aufrufende Kernel-Thread auf das Auftreten eines gemeinsam genutzten Ereignisses wartet.
Syntax
#include <sys/sleep.h>
Parameter
| Element | Beschreibung |
|---|---|
| Ereigniswort | Gibt das gemeinsam genutzte Ereigniswort an. Der Kernel verwendet den Parameter Ereigniswort als Anker für die Liste der Threads, die auf dieses gemeinsam genutzte Ereignis warten. |
| Sperrwort | Gibt die zu entsperrende einfache oder komplexe Sperre an. |
| Flags | Gibt Optionen für Sperren und Signalverarbeitung an. |
Beschreibung
Der _Sleep_Thread -Kernel-Service zwingt den aufrufenden Thread zu warten, bis ein gemeinsam genutztes Ereignis eintritt. Der Kernel platziert den aufrufenden Thread in der Ereignisliste, die durch den Parameter Ereigniswort verankert ist. Diese Liste wird von den Kernel-Services E_Wakeup, e_wakeup_oneund e_wakeup_w_ergebnis verwendet, um einige oder alle Threads zu aktivieren, die auf das Eintreten des Ereignisses warten.
Eine Sperre kann angegeben werden. Sie wird freigegeben, wenn der Kernel-Service eingegeben wird, kurz bevor der Thread blockiert wird. Diese Sperre kann eine einfache oder eine komplexe Sperre sein, wie durch den Parameter Flags angegeben. Wenn der Kernel-Service beendet wird, wird die Sperre erneut angefordert.
Flags
Der Parameter Flags gibt Optionen für den Kernel-Service an. Mehrere Flags können mit dem bitweisen OR-Operator kombiniert werden. Sie werden nachfolgend beschrieben.
Die vier folgenden Flags geben den Sperrtyp an. Wenn der Parameter Sperrwort nicht NULList, muss genau eines dieser Flags verwendet werden.
| Markierung | Beschreibung |
|---|---|
| LOCK_HANDLER | Sperrwort gibt eine einfache Sperre an, die einen kritischen Abschnitt für einen Thread-oder Interrupt-Interrupt schützt. |
| LOCK_EINFACH | Sperrwort gibt eine einfache Sperre an, die einen kritischen Threadabschnitt schützt. |
| LOCK_READ (Sperren) | Sperrwort gibt eine komplexe Sperre im Modus für gemeinsames Lesen an. |
| LOCK_SCHREIBEN | Sperrwort gibt eine komplexe Sperre im exklusiven Schreibmodus an. |
Das folgende Flag gibt die Signalverarbeitung an. Während der Thread inaktiv ist, werden Signale standardmäßig im Wartestatus gehalten, bis sie aktiviert werden.
| Element | Beschreibung |
|---|---|
| UNTERBRECHBAR | Die Signale müssen überprüft werden, während der Kernel-Thread im Ruhemodus ist. Wenn ein Signal übermittelt werden muss, wird der Thread aktiviert. |
Rückgabewerte
Der _Sleep_Thread -Kernel-Service gibt einen Wert zurück, der angibt, wie der Kernel-Thread aktiviert wurde. Die folgenden Werte sind definiert:
| Element | Beschreibung |
|---|---|
| THREAD_ERWACHT | Bezeichnet eine normale Aktivierung; das Ereignis ist aufgetreten. |
| THREAD_UNTERBROCHEN | Bezeichnet eine Unterbrechung durch ein Signal. Dieser Wert kann auch dann zurückgegeben werden, wenn das Flag UNTERBRECHBAR nicht gesetzt ist, da er auch von den Kernel-Services _clear_wait oder e_wakeup_w_ergebnis generiert werden kann. |
| Zeitlimit für THREAD_TIMED_OUT | Gibt einen Zeitlimitverfall an. _Sleep_Thread hat kein Zeitlimit. Die Kernel-Services _clear_wait oder e_wakeup_w_ergebnis können diesen Rückgabewert jedoch generieren. |
| THREAD_ANDERE | Beschreibt die vordefinierten Systemcodes von denen, die auf Subsystemebene definiert werden müssen. Das Subsystem muss eigene Werte definieren, die größer-gleich diesem Wert sind. |
Ausführungsumgebung
Der _Sleep_Thread -Kernel-Service kann nur aus der Prozess -Umgebung aufgerufen werden.