std.thread
POSIX-Threads (pthread) mit Lyx-Wrapper-Typen: Thread (ThreadCreate, ThreadJoin), Mutex (rekursiv-sichere Sperre mit MutexLock/MutexUnlock), Cond (Bedingungsvariablen für Producer/Consumer, CondWait/CondSignal), TLSKey (Thread-Local-Storage für pro-Thread-Daten), SharedMem (anonymes Shared Memory über mmap) und Atomic (atomarer int64-Wert mit AtomicAdd und Compare-And-Swap CAS).
Einsatzbereiche: parallele Server (Thread-Pool), Worker-Queues, nebenläufige Datenverarbeitung, Lock-freie Algorithmen.
Autor: Andreas Röne
Copyright: 2024-2025 Andreas Röne
Imports
Externe Funktionen
Extern deklarierte Funktionen (aus C-Bibliotheken):
| Signatur | Beschreibung |
pthread_mutex_init(mutex: int64, attr: int64): int64 | Initialisiert POSIX-Mutex |
pthread_mutex_lock(mutex: int64): int64 | Sperrt POSIX-Mutex |
pthread_mutex_unlock(mutex: int64): int64 | Gibt POSIX-Mutex frei |
pthread_mutex_destroy(mutex: int64): int64 | Zerstört POSIX-Mutex |
pthread_exit(code: int64): void | Beendet aktuellen Thread |
_exit(code: int64): void | Beendet Prozess sofort |
getpid(): int64 | Gibt aktuelle Prozess-ID zurück |
Typen
Thread (struct)
| Feld | Typ |
id | int64 |
handle | int64 |
running | int64 |
Funktionen
| Signatur | Sichtbarkeit | Beschreibung |
ThreadCreate(func: int64, arg: int64): Thread | pub | Erstellt und startet neuen Thread |
ThreadSelf(): int64 | pub | Gibt Handle des aktuellen Threads zurück |
ThreadIsRunning(thread: Thread): int64 | pub | ungleich 0 wenn der Thread noch läuft |
ThreadJoin(thread: Thread): void | pub | Wartet auf Thread-Ende (liefert keinen Rückgabewert) |
pthread_cond_init(cond: int64, attr: int64): int64 | | Initialisiert POSIX-Bedingungsvariable |
pthread_cond_wait(cond: int64, mutex: int64): int64 | | Wartet auf Bedingungsvariable |
pthread_cond_signal(cond: int64): int64 | | Signalisiert einen wartenden Thread |
CondBroadcast(c: Cond): void | pub | Weckt alle wartenden Threads |
pthread_cond_destroy(cond: int64): int64 | | Zerstört Bedingungsvariable |
Mutex (struct)
| Feld | Typ |
lock | int64 |
owner | int64 |
count | int64 |
| Signatur | Sichtbarkeit | Beschreibung |
MutexNew(): Mutex | pub | Erstellt und initialisiert neuen Mutex |
MutexLock(mutex: Mutex): int64 | pub | Sperrt Mutex (rekursiv-sicher) |
MutexUnlock(mutex: Mutex): int64 | pub | Gibt Mutex frei |
Cond (struct)
| Signatur | Sichtbarkeit | Beschreibung |
CondNew(): Cond | pub | Erstellt neue Bedingungsvariable |
CondWait(cond: Cond, mutex: Mutex): int64 | pub | Wartet auf Signal an Bedingungsvariable |
CondSignal(cond: Cond): int64 | pub | Weckt einen wartenden Thread auf |
pthread_key_create(key: int64, destructor: int64): int64 | | Erstellt TLS-Schlüssel mit Destruktor |
pthread_key_delete(key: int64): int64 | | Löscht TLS-Schlüssel |
pthread_getspecific(key: int64): int64 | | Liest Thread-lokalen Wert |
pthread_setspecific(key: int64, value: int64): int64 | | Setzt Thread-lokalen Wert |
Die pthread_*-Ebene ist weitgehend da (
#1246, nachgemessen mit lyxc 1.2.2B):
pthread_cond_init,
pthread_cond_destroy,
pthread_cond_signal,
pthread_cond_broadcast,
pthread_cond_wait,
pthread_key_create,
pthread_key_delete,
pthread_getspecific,
pthread_setspecific und
_exit stehen in
std/thread.lyx.
Nicht vorhanden sind pthread_create, pthread_join, pthread_self und pthread_detach. Threads werden über
ThreadCreate/
ThreadJoin gestartet und eingesammelt — die rohe C-Ebene dafür gibt es nicht.
TLSKey = int64
| Signatur | Sichtbarkeit | Beschreibung |
TLSKeyCreate(): TLSKey | pub | Erstellt neuen Thread-Local-Storage-Schlüssel |
TLSSetValue(key: TLSKey, value: int64): int64 | pub | Setzt Thread-lokalen Wert |
TLSGetValue(key: TLSKey): int64 | pub | Liest Thread-lokalen Wert |
SharedMem (struct)
| Feld | Typ |
data | int64 |
size | int64 |
| Signatur | Sichtbarkeit | Beschreibung |
SharedMemCreate(size: int64): SharedMem | pub | Erstellt anonymes Shared-Memory-Segment |
SharedMemFree(mem: SharedMem): int64 | pub | Gibt Shared-Memory-Segment frei |
Atomic (struct)
| Signatur | Sichtbarkeit | Beschreibung |
AtomicNew(initial: int64): Atomic | pub | Initialisiert atomaren Wert |
AtomicAdd(atomic: Atomic, delta: int64): int64 | pub | Addiert Wert atomar, gibt Ergebnis zurück |
CAS(atomic: Atomic, oldVal: int64, newVal: int64): int64 | pub | Compare-And-Swap atomar ausführen |
Letzte Aktualisierung: 2026-09-05 (#1246, nachgemessen mit lyxc 1.2.2B) — Kasten gezogen: die meisten pthread_*-Bindings sind vorhanden; es fehlen nur pthread_create, pthread_join, pthread_self und pthread_detach.
Vorherige letzte Aktualisierung: 2026-08-09 (Dateistand)