Vlákna.h

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 21. května 2022; ověření vyžaduje 1 úpravu .

threads.h  - hlavičkový soubor standardní knihovny programovacího jazyka C , obsahující makra, typy, konstanty a funkce pro práci s vlákny . Tento soubor záhlaví se objevil ve standardu C11 . [jeden]

Makra

název Poznámky
thread_local makro používané k deklaraci lokální proměnné vlákna
TSS_DTOR_ITERATIONS makro, které se rozšiřuje na kladný celočíselný konstantní výraz, který určuje maximální počet volání destruktoru pro ukazatel místní paměti vlákna pomocí thrd_exit.

Konstanty a typy

název Poznámky
thrd_success označuje úspěšné dokončení
thrd_timedout označuje neúspěšné provedení, které skončilo kvůli vypršení časového limitu
thrd_busy označuje neúspěšné provedení, které skončilo, protože nebylo možné získat přístup k prostředku
thrd_nomem označuje neúspěšné provedení z důvodu nedostatku paměti
thrd_error označuje neúspěšné provedení, které skončilo kvůli nějaké chybě
thrd_t typ specifický pro implementaci představující ID vlákna
thrd_start_t alias pro typ int(*)(void*)používaný funkcí thrd_create
mtx_plain hodnota identifikující typ mutexu, který nemá kontrolu nad tím, aby byl opakovaně získán stejným vláknem
mtx_recursive hodnota, která identifikuje typ mutexu, který může být znovu získán stejným vláknem mnohokrát, což vede počítadlo takového získání
mtx_timed hodnota identifikující typ mutexu, který podporuje zamykání, vrací chybu po uplynutí zadaného času
mtx_t typ představující identifikátor mutexu
cnd_t typ představující identifikátor proměnné podmínky
tss_t typ představující ukazatel na místní paměť vlákna
tss_dtor_t synonymum pro typ void(*)(void*)používaný jako destruktor místní paměti vlákna

Funkce

název Poznámky
int thrd_create(thrd_t *thr, thrd_start_t func, void *arg) vytvoří nové vlákno provádějící funkci func s argumenty arg a vloží jeho identifikátor do thr
int thrd_equal(thrd_t lhs, thrd_t rhs) zkontroluje, zda lhs ukazuje na stejný proud jako rhs
thrd_t thrd_current(void) vrátí ID aktuálního vlákna
int thrd_sleep(const struct timespec* duration, struct timespec* remaining) zastaví aktuální vlákno na dobu trvání a do zbývajícího času vloží zbývající čas před pokračováním v práci,
void thrd_yield(void) dává plánovači úloh nápovědu k přeplánování provádění vláken, což umožňuje spouštění jiných vláken
_Noreturn void thrd_exit(int res) ukončí provádění aktuálního vlákna nastavením jeho návratového kódu na res
int thrd_detach(thrd_t thr) odpojí proud identifikovaný thr od aktuálního prostředí.
int thrd_join(thrd_t thr, int *res) čeká na ukončení vlákna identifikovaného thr a umístí jeho prováděcí kód do res
int mtx_init(mtx_t* mutex, int type) vytvoří mutex typu umístěním jeho identifikátoru do proměnné, na kterou mutex ukazuje
int mtx_lock(mtx_t* mutex) zastaví aktuální vlákno, dokud se neodemkne mutex, na který mutex ukazuje
int mtx_timedlock(mtx_t *restrict mutex, const struct timespec *restrict time_point) zastaví aktuální vlákno, dokud není odemčen mutex, na který ukazuje mutex, nebo dokud není dosaženo bodu v čase, na který ukazuje time_point
int mtx_trylock(mtx_t *mutex) uzamkne mutex, pokud již není uzamčen
int mtx_unlock(mtx_t *mutex) odemkne mutex, na který ukazuje mutex
int mtx_destroy(mtx_t *mutex) ničí mutex, na který mutex ukazuje
void call_once(once_flag* flag, void (*func)(void) func) volání func přesně jednou, i když je voláno z více vláken
int cnd_init(cnd_t* cond) vytvoří podmínkovou proměnnou vložením jejího id do cond
int cnd_signal(cnd_t *cond) odblokuje jedno vlákno čekající na proměnnou podmínky, na kterou ukazuje cond
int cnd_wait(cnd_t* cond, mtx_t* mutex) odemkne mutex, na který ukazuje mutex, a uzamkne proměnnou podmínky, na kterou ukazuje cond, dokud vlákno nehlásí cnd_signal nebo cnd_broadcast nebo nedojde k falešnému probuzení
int cnd_timedwait( cnd_t* restrict cond, mtx_t* restrict mutex, const struct timespec* restrict time_point ) odemkne mutex, na který ukazuje mutex, a uzamkne proměnnou podmínky, na kterou ukazuje cond, dokud vlákno nehlásí cnd_signal nebo cnd_broadcast, nebo dokud není dosaženo bodu v čase, na který ukazuje time_point, nebo dokud nedojde k falešnému probuzení
void cnd_destroy(cnd_t* cond); zničí proměnnou podmínky, na kterou ukazuje cond
int tss_create(tss_t* tss_key, tss_dtor_t destructor) vytvoří místní úložiště vlákna s daným destruktorem destruktoru a vloží jeho identifikátor do proměnné, na kterou ukazuje tss_key
void *tss_get(tss_t tss_key) vrací data obsažená v místním úložišti vlákna, identifikovaná pomocí tts_key
int tss_set(tss_t tss_id, void *val) nastaví hodnotu uloženou v místním úložišti vlákna identifikovaného tts_key na val
void tss_delete(tss_t tss_id) zničí místní úložiště vlákna identifikované tts_id

Odkazy

Poznámky

  1. ISO/IEC 9899:201x . Získáno 11. července 2020. Archivováno z originálu dne 29. března 2018.