====== 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 ist weitgehend da** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1246|#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 ([[https://github.com/SEOLizer/LyX-Compiler/issues/1246|#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)