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 года.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.