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 und_exitsind nicht verfügbar. 14 Einträge dieser Tabelle —pthread_cond_init,pthread_cond_destroy,pthread_cond_signal,pthread_cond_wait,pthread_exit,pthread_getspecific,pthread_key_create,_exitund weitere — melden beim Aufrufundefined symbol.
Die Unit selbst arbeitet:ThreadCreate/ThreadJoinstarten echte Threads und reichen das Argument durch, ebenso dieAtomic*-,Mutex*- undTLS*-Funktionen. Es fehlt allein die tieferliegende POSIX-Schicht.
(Issue #1246)
| 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 |