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(startetthreading_thread_function),threading_thread_join. - Sleep:
threading_thread_sleepmit ZeitauflösungTTR_NANO/MICRO/MILLI/SECOND+ Dauer. - Kritische Sektion: POSIX-Mutex als
threading_critical_section–initialize/destroy/lock/unlock. - Semaphore: POSIX-Semaphore als
threading_semaphore–initialize(Wert),increment,wait(mit Timeout),destroy. Zusätzlich benannte Semaphore:open(mitexclusive/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) NULLzum Vergleich.- Named Semaphore werden über den POSIX-Namensraum angesprochen (Begriff für
prozessübergreifende Semaphore),
unlinkentfernt den zugehörigen Namen.
Abhängigkeiten
string(String-/Pfad-Helfer)
Build
cmake -S . -B build
cmake --build buildEinbindung: add_subdirectory(../../libraries/threading …), Header über den
Include-Pfad <threading/threading.h>.
Quellen
- Repo: https://github.com/deppenkaiser/threading (public, Apache-2.0)
libraries/threading/threading/{threading.h,threading.c}- POSIX:
<pthread.h>,<semaphore.h>