threading – Thread- und Synchronisations-Helfer

Zusammenfassung

threading ist ein dünner C-Wrapper um POSIX-Threads und Synchronisationsprimitiven: Thread-Erzeugung/-Joining, Schlaf mit wählbarer Zeitauflösung, kritische Sektionen (Mutex) und Semaphore (unbenannt und benannt). Es entkoppelt den übrigen Code von direkten pthread-Nutzerdetail und bündelt die von sm benötigte Thread-Funktionalität.

Umfang

  • Threads: threading_thread_create (startet threading_thread_function), threading_thread_join.
  • Sleep: threading_thread_sleep mit Zeitauflösung TTR_NANO/MICRO/MILLI/SECOND + Dauer.
  • Kritische Sektion: POSIX-Mutex als threading_critical_sectioninitialize/destroy/lock/unlock.
  • Semaphore: POSIX-Semaphore als threading_semaphoreinitialize (Wert), increment, wait (mit Timeout), destroy. Zusätzlich benannte Semaphore: open (mit exclusive/Startwert), close, unlink.

API

pthread_t threading_thread_create(threading_thread_function function, void* user_data);
void threading_thread_join(pthread_t handle);
void threading_thread_sleep(enum threading_time_resolution mode, uint32_t duration);
 
void threading_critical_section_initialize/destroy/lock/unlock(threading_critical_section_t);
 
void threading_semaphore_initialize(threading_semaphore_t sem, uint32_t value);
threading_semaphore_t threading_semaphore_open(const char* name, bool exclusive, int32_t value);
void threading_semaphore_increment(threading_semaphore_t sem);
bool threading_semaphore_wait(threading_semaphore_t sem,
                              enum threading_time_resolution mode, uint32_t duration);
void threading_semaphore_close/destroy(threading_semaphore_t sem);
void threading_semaphore_unlink(const char* name);

Nutzung

#include <threading/threading.h>
 
void* worker(void* user_data) { /* ... */ return NULL; }
 
pthread_t t = threading_thread_create(worker, NULL);
threading_thread_join(t);

Hinweise

  • THREADING_INVALID_THREADHANDLE = (pthread_t) NULL zum Vergleich.
  • Named Semaphore werden über den POSIX-Namensraum angesprochen (Begriff für prozessübergreifende Semaphore), unlink entfernt den zugehörigen Namen.

Abhängigkeiten

  • string (String-/Pfad-Helfer)

Build

cmake -S . -B build
cmake --build build

Einbindung: add_subdirectory(../../libraries/threading …), Header über den Include-Pfad <threading/threading.h>.

Quellen

Verwandte Artikel