threads.h — заголовочный файл стандартной библиотеки языка программирования С, содержащий макросы, типы, константы и функции для работы с потоками. Данный заголовочный файл появился в стандарте C11.
Макросы
Имя Примечанияthread_local макрос, используемый для объявления локальной переменной потокаTSS_DTOR_ITERATIONS макрос, расширяемый до положительного целочисленного константного выражения, определяющего максимальное количество раз, которое деструктор для локального указателя памяти потока будет вызываться thrd_exit.
Константы и типы
Имя Примечанияthrd_success указывает на успешное выполнениеthrd_timedout указывает на неудачное выполнение, завершившееся ввиду превышения времени ожиданияthrd_busy указывает на неудачное выполнение, завершившееся ввиду невозможности получить доступ к ресурсуthrd_nomem указывает на неудачное выполнение, завершившееся ввиду нехватки памятиthrd_error указывает на неудачное выполнение, завершившееся ввиду какой-либо ошибкиthrd_t зависящий от реализации тип, представляющий идентификатор потокаthrd_start_t синоним типа int(*)(void*), используемый функцией thrd_createmtx_plain значение, идентифицирующее тип мьютекса, у которого нет контроля повторного захвата множество раз одним и тем же потокомmtx_recursive значение, идентифицирующее тип мьютекса, повторные захваты которого одним и тем же потоком множество раз допустимы, ведущего счётчик таких захватовmtx_timed значение, идентифицирующее тип мьютекса, поддерживающего захват с возвращением ошибки по истечении указанного времениmtx_t тип, представляющий индентификатор мьютексаcnd_t тип, представляющий индентификатор условной переменнойtss_t тип, представляющий указатель на локальную память потокаtss_dtor_t синоним типа void(*)(void*), используемого в качестве деструктора локальной памяти потока
Функции
Имя Примечанияint thrd_create(thrd_t *thr, thrd_start_t func, void *arg) создает новый поток, исполняющий func с аргументами arg, помещая его идентификатор в thrint thrd_equal(thrd_t lhs, thrd_t rhs) проверяет, указывает ли lhs на тот же поток, что и rhsthrd_t thrd_current(void) возвращает идентификатор текущего потокаint thrd_sleep(const struct timespec* duration, struct timespec* remaining) останавливает текущий поток на длительность duration, помещая оставшее до возобновления работы время в remaining, void thrd_yield(void) предоставляет планировщику задач подсказку перепланировать выполнение потоков, позволяя другим потокам работать _Noreturn void thrd_exit(int res) завершает выполнение текущего потока, устанавливая его код возврата равным resint thrd_detach(thrd_t thr) отсоединяет поток, идентефицируемый thr, от текущей среды.int thrd_join(thrd_t thr, int *res) ожидает завершение работы потока, идентифицируемого thr, помещая его код исполнения в resint mtx_init(mtx_t* mutex, int type) создает мьютекс типа type, помещая его идентификатор в переменную, на которую указывает mutexint mtx_lock(mtx_t* mutex) останавливает работу текущего потока, пока мьютекс, на который указывает mutex, не будет разблокированint mtx_timedlock(mtx_t *restrict mutex, const struct timespec *restrict time_point) останавливает работу текущего потока, пока мьютекс, на который указывает mutex, не будет разблокирован, или пока не будет достигнут момент времени, на который указывает time_pointint mtx_trylock(mtx_t *mutex) блокирует мьютекс, если он уже не заблокированint mtx_unlock(mtx_t *mutex) разблокирует мьютекс, на который указывает mutexint mtx_destroy(mtx_t *mutex) уничтожает мьютекс, на который указывает mutexvoid call_once(once_flag* flag, void (*func)(void) func) вызывает функцию func ровно один раз, даже если вызывается из нескольких потоковint cnd_init(cnd_t* cond) создает условную переменную, помещая ее идентификатор в condint cnd_signal(cnd_t *cond) разблокирует один поток, ожидающий условную переменную, на которую указывает condint cnd_wait(cnd_t* cond, mtx_t* mutex) разблокирует мьютекс, на который указывает mutex, и блокирует переменную условия, на которую указывает cond, до тех пор, пока поток не сообщит cnd_signal или cnd_broadcast, или пока не произойдет ложное пробуждениеint cnd_timedwait( cnd_t* restrict cond, mtx_t* restrict mutex, const struct timespec* restrict time_point ) разблокирует мьютекс, на который указывает mutex, и блокирует переменную условия, на которую указывает cond, до тех пор, пока поток не сообщит cnd_signal или cnd_broadcast, или пока не будет достигнут момент времени, на который указывает time_point, или пока не произойдет ложное пробуждениеvoid cnd_destroy(cnd_t* cond); уничтожает условную переменную, на которую указывает condint tss_create(tss_t* tss_key, tss_dtor_t destructor) создает локальное хранилище потока с заданным деструктором destructor, помещая его идентификатор в переменную, на которую указывает tss_keyvoid *tss_get(tss_t tss_key) возвращает данные, содержащиеся в локальном хранилище потока, идентифицируемом tts_key int tss_set(tss_t tss_id, void *val) устанавливает значение, хранящееся в локальном хранилище потока, идентифицируемом tts_key, равным valvoid tss_delete(tss_t tss_id) уничтожает локальное хранилище потока, идентифицируемое tts_id
Ссылки threads.h на C++ Reference
Примечания
Категория:Заголовочные файлы языка Си