threads.h

Перейти к навигацииПерейти к поиску
Стандартная библиотека
языка программирования С

threads.h — заголовочный файл стандартной библиотеки языка программирования С, содержащий макросы, типы, константы и функции для работы с потоками. Данный заголовочный файл появился в стандарте C11.[1]

Макросы

ИмяПримечания
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_create
mtx_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, помещая его идентификатор в thr
int thrd_equal(thrd_t lhs, thrd_t rhs)проверяет, указывает ли lhs на тот же поток, что и rhs
thrd_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)завершает выполнение текущего потока, устанавливая его код возврата равным res
int thrd_detach(thrd_t thr)отсоединяет поток, идентефицируемый thr, от текущей среды.
int thrd_join(thrd_t thr, int *res)ожидает завершение работы потока, идентифицируемого thr, помещая его код исполнения в res
int mtx_init(mtx_t* mutex, int type)создает мьютекс типа type, помещая его идентификатор в переменную, на которую указывает mutex
int mtx_lock(mtx_t* mutex)останавливает работу текущего потока, пока мьютекс, на который указывает mutex, не будет разблокирован
int mtx_timedlock(mtx_t *restrict mutex, const struct timespec *restrict time_point)останавливает работу текущего потока, пока мьютекс, на который указывает mutex, не будет разблокирован, или пока не будет достигнут момент времени, на который указывает time_point
int mtx_trylock(mtx_t *mutex)блокирует мьютекс, если он уже не заблокирован
int mtx_unlock(mtx_t *mutex)разблокирует мьютекс, на который указывает mutex
int mtx_destroy(mtx_t *mutex)уничтожает мьютекс, на который указывает mutex
void call_once(once_flag* flag, void (*func)(void) func)вызывает функцию func ровно один раз, даже если вызывается из нескольких потоков
int cnd_init(cnd_t* cond)создает условную переменную, помещая ее идентификатор в cond
int cnd_signal(cnd_t *cond)разблокирует один поток, ожидающий условную переменную, на которую указывает cond
int 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);уничтожает условную переменную, на которую указывает cond
int tss_create(tss_t* tss_key, tss_dtor_t destructor)создает локальное хранилище потока с заданным деструктором destructor, помещая его идентификатор в переменную, на которую указывает tss_key
void *tss_get(tss_t tss_key)возвращает данные, содержащиеся в локальном хранилище потока, идентифицируемом tts_key
int tss_set(tss_t tss_id, void *val)устанавливает значение, хранящееся в локальном хранилище потока, идентифицируемом tts_key, равным val
void tss_delete(tss_t tss_id)уничтожает локальное хранилище потока, идентифицируемое tts_id

Ссылки

Примечания

  1. ISO/IEC 9899:201x. Дата обращения: 11 июля 2020. Архивировано 29 марта 2018 года.