◐ Shell
clean mode source ↗

Библиотека поддержки конкурентности — cppreference.com

C включает в себя встроенную поддержку потоков, атомарных операций, взаимное исключение, условные переменные и специфичные для потоков классы памяти.

Эти возможности предоставляются опционально:

  • если константа-макрос __STDC_NO_THREADS__ определена компилятором, то заголовочный файл <threads.h> и все имена в нём не предоставляются;
  • если константа-макрос __STDC_NO_ATOMICS__ определена компилятором, то заголовочный файл <stdatomic.h> и все имена в нём не предоставляются.

Потоки

Определены в заголовочном файле <threads.h>

thrd_t определённый реализацией полный тип объекта, идентифицирующего поток [править]
создаёт поток
(функция) [править]
проверяет, ссылаются ли два идентификатора на один и тот же поток
(функция) [править]
получает идентификатор текущего потока
(функция) [править]
приостанавливает исполнение вызывающего потока на заданный период времени
(функция) [править]
вырабатывает текущий срез времени
(функция) [править]
завершает вызывающий поток
(функция) [править]
обособляет поток
(функция) [править]
блокирует, пока поток не завершится
(функция) [править]
сообщает статус ошибки потока
(константа) [править]

thrd_start_t

(C11)

определение типа указателя на функцию int(*)(void*), используемого в thrd_create
(определение типа) [править]

Атомарные операции

Определены в заголовочном файле <stdatomic.h>

Операции с атомарными типами

указывает, что данный тип атомного без блокировок

Оригинал:

indicates that the given atomic type is lock-free

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(макроконстанта) [править]

указывает, является ли атомная объекта без блокировок

Оригинал:

indicates whether the atomic object is lock-free

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

сохраняет значение в атомном объекте

Оригинал:

stores a value in an atomic object

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

считывает значение с атомным объектом

Оригинал:

reads a value from an atomic object

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

свопы значение с значением атомного объекта

Оригинал:

swaps a value with the value of an atomic object

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

свопы значение с атомным объектом, если старое значение то, что, как ожидается, в противном случае читает старое значение

Оригинал:

swaps a value with the an atomic object if the old value is what is expected, otherwise reads the old value

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

атомное сложение

Оригинал:

atomic addition

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

атомная вычитание

Оригинал:

atomic subtraction

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

атомная логического ИЛИ

Оригинал:

atomic logical OR

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

атомная логического исключающего ИЛИ

Оригинал:

atomic logical exclusive OR

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

атомная логическое И

Оригинал:

atomic logical AND

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]
Типы флагов и операции
lock-free atomic boolean flag
(структура) [править]

устанавливает atomic_flag к истинному и возвращает старое значение

Оригинал:

sets an atomic_flag to true and returns the old value

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

устанавливает atomic_flag к ложным

Оригинал:

sets an atomic_flag to false

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]
Инициализация
initializes an existing atomic object
(функция) [править]

инициализирует новый атомный объект

Оригинал:

initializes a new atomic object

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция-макрос) [править]

инициализирует новый atomic_flag

Оригинал:

initializes a new atomic_flag

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(макроконстанта) [править]
Порядок синхронизации памяти

определяет памяти заказе ограничений

Оригинал:

defines memory ordering constraints

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(перечисление) [править]

разбивает цепочку зависимостей для memory_order_consume

Оригинал:

breaks a dependency chain for memory_order_consume

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция-макрос) [править]

общая память зависит от порядка синхронизации забор примитивной

Оригинал:

generic memory order-dependent fence synchronization primitive

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

забор между нитью и обработчик сигнала выполняется в том же потоке

Оригинал:

fence between a thread and a signal handler executed in the same thread

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]
Удобные псевдонимы имён типов
Typedef-имя Полное имя типа
atomic_bool(C11) _Atomic _Bool
atomic_char(C11) _Atomic char
atomic_schar(C11) _Atomic signed char
atomic_uchar(C11) _Atomic unsigned char
atomic_short(C11) _Atomic short
atomic_ushort(C11) _Atomic unsigned short
atomic_int(C11) _Atomic int
atomic_uint(C11) _Atomic unsigned int
atomic_long(C11) _Atomic long
atomic_ulong(C11) _Atomic unsigned long
atomic_llong(C11) _Atomic long long
atomic_ullong(C11) _Atomic unsigned long long
atomic_char8_t(C23) _Atomic char8_t
atomic_char16_t(C11) _Atomic char16_t
atomic_char32_t(C11) _Atomic char32_t
atomic_wchar_t(C11) _Atomic wchar_t
atomic_int_least8_t(C11) _Atomic int_least8_t
atomic_uint_least8_t(C11) _Atomic uint_least8_t
atomic_int_least16_t(C11) _Atomic int_least16_t
atomic_uint_least16_t(C11) _Atomic uint_least16_t
atomic_int_least32_t(C11) _Atomic int_least32_t
atomic_uint_least32_t(C11) _Atomic uint_least32_t
atomic_int_least64_t(C11) _Atomic int_least64_t
atomic_uint_least64_t(C11) _Atomic uint_least64_t
atomic_int_fast8_t(C11) _Atomic int_fast8_t
atomic_uint_fast8_t(C11) _Atomic uint_fast8_t
atomic_int_fast16_t(C11) _Atomic int_fast16_t
atomic_uint_fast16_t(C11) _Atomic uint_fast16_t
atomic_int_fast32_t(C11) _Atomic int_fast32_t
atomic_uint_fast32_t(C11) _Atomic uint_fast32_t
atomic_int_fast64_t(C11) _Atomic int_fast64_t
atomic_uint_fast64_t(C11) _Atomic uint_fast64_t
atomic_intptr_t(C11) _Atomic intptr_t
atomic_uintptr_t(C11) _Atomic uintptr_t
atomic_size_t(C11) _Atomic size_t
atomic_ptrdiff_t(C11) _Atomic ptrdiff_t
atomic_intmax_t(C11) _Atomic intmax_t
atomic_uintmax_t(C11) _Atomic uintmax_t

Взаимное исключение

Определены в заголовочном файле <threads.h>

mtx_t идентификатор мьютекса [править]

создает мьютекс

Оригинал:

creates a mutex

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]
блокирует, пока не захватит мьютекс
(функция) [править]
Блокирует до захвата мьютекса или тайм-аута
(функция) [править]
Неблокирующий захват мьютекса
(функция) [править]

разблокирует мьютекс

Оригинал:

unlocks a mutex

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

разрушает мьютекс

Оригинал:

destroys a mutex

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

определяет тип мьютекса

Оригинал:

defines the type of a mutex

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(перечисление) [править]
Однократный вызов

вызывает функцию только один раз

Оригинал:

calls a function exactly once

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

Условные переменные

Определены в заголовочном файле <threads.h>

cnd_t condition variable identifier

создает условия переменной

Оригинал:

creates a condition variable

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

разблокирует один поток заблокирован на переменной условия

Оригинал:

unblocks one thread blocked on a condition variable

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

разблокирует все темы заблокирован на переменной условия

Оригинал:

unblocks all threads blocked on a condition variable

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

блоки на переменной условия

Оригинал:

blocks on a condition variable

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

блоки на переменной условия, при тайм-аут

Оригинал:

blocks on a condition variable, with a timeout

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

разрушает переменной условия

Оригинал:

destroys a condition variable

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

Локальные для потока классы памяти

Определены в заголовочном файле <threads.h>

Тема местные макро типа

Оригинал:

thread local type macro

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(макроконстанта) [править]
tss_t

конкретного потока хранения указателей

Оригинал:

thread-specific storage pointer

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править]

Максимальное количество деструкторов раз называют

Оригинал:

maximum number of times destructors are called

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(макроконстанта) [править]
tss_dtor_t function pointer type used for TSS destructor [править]
creates thread-specific storage pointer with a given destructor
(функция) [править]

считывает данные из конкретного потока хранения

Оригинал:

reads from thread-specific storage

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

писать для конкретного потока хранения

Оригинал:

write to thread-specific storage

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

освобождает ресурсы, занятые данного конкретного потока указатель

Оригинал:

releases the resources held by a given thread-specific pointer

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(функция) [править]

Зарезервированные идентификаторы

В будущих версиях стандарта C:

  • имена функций, типов и констант перечислений, которые начинаются с cnd_, mtx_, thrd_ или tss_ и буквы в нижнем регистре, могут быть добавлены в заголовочный файл <threads.h>;
  • макросы, которые начинаются с ATOMIC_ и буквы в верхнем регистре, могут быть добавлены в заголовочный файл <stdatomic.h>;
  • typedef-имена, которые начинаются с atomic_ или memory_ и буквы в нижнем регистре, могут быть добавлены в объявления в заголовочном файле <stdatomic.h>;
  • константы перечислений, которые начинаются с memory_order_ и буквы в нижнем регистре, могут быть добавлены в определение типа memory_order в заголовочном файле <stdatomic.h>;
  • имена функций, которые начинаются с atomic_ и буквы в нижнем регистре, могут быть добавлены в объявления в заголовочном файле <stdatomic.h>.

Идентификаторы, зарезервированные для имён функций, всегда потенциально (начиная с C23) зарезервированы для использования в качестве идентификаторов внешних связей, тогда как список других идентификаторов потенциально (начиная с C23) зарезервирован, когда включается заголовочный файл <stdatomic.h>.

Объявление, определение или отмена определения (#undef) такого идентификатора приводит к неопределённому поведению, если он предоставляется стандартом или реализацией (начиная с C23). Переносимые программы не должны использовать эти идентификаторы.

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.17 Атомарность <stdatomic.h> (стр. 200-209)
  • 7.26 Потоки <threads.h> (стр. 274-283)
  • 7.31.8 Атомарность <stdatomic.h> (стр. 332)
  • 7.31.15 Потоки <threads.h> (стр. 333)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.17 Атомарность <stdatomic.h> (стр. 273-286)
  • 7.26 Потоки <threads.h> (стр. 376-387)
  • 7.31.8 Атомарность <stdatomic.h> (стр. 455-456)
  • 7.31.15 Потоки <threads.h> (стр. 456)

См. также

Внешние ссылки