====== std.thread ====== POSIX-Threads (''pthread'') mit Lyx-Wrapper-Typen: ''Thread'' (''ThreadCreate'', ''ThreadJoin'', ''ThreadExit''), ''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 ===== ^ 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): bool'' | pub | Prüft ob Thread noch läuft | | ''ThreadJoin(thread: Thread): int64'' | pub | Wartet auf Thread-Ende | | ''ThreadExit(code: int64): void'' | pub | Beendet aktuellen Thread mit Code | | ''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 | | ''pthread_cond_broadcast(cond: int64): int64'' | | Signalisiert 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 ^ | ''MutexInit(): 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 ^ | ''CondInit(): 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 | ==== 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 ^ | ''AtomicInit(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 |