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
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 |
| Feld | Typ |
|---|---|
id | int64 |
handle | int64 |
running | int64 |
| 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 |
| 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 |
| 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 |
Diepthread_*-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_setspecificund_exitstehen instd/thread.lyx.
Nicht vorhanden sindpthread_create,pthread_join,pthread_selfundpthread_detach. Threads werden überThreadCreate/ThreadJoingestartet und eingesammelt — die rohe C-Ebene dafür gibt es nicht.
| 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 |
| 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 |
| 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)