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)

Feld Typ
signal int64
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)

Feld Typ
value int64
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)