====== 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 ===== * ''[[lyx_-_programmiersprache:units:os|std.os]]'' ---- ===== 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 und ''_exit'' sind 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'', ''_exit'' und weitere — melden beim Aufruf ''undefined symbol''. > > Die Unit selbst arbeitet: ''ThreadCreate''/''ThreadJoin'' starten echte Threads und reichen das Argument durch, ebenso die ''Atomic*''-, ''Mutex*''- und ''TLS*''-Funktionen. Es fehlt allein die tieferliegende POSIX-Schicht. > ([[https://github.com/SEOLizer/LyX-Compiler/issues/1246|Issue #1246]]) ==== 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 |