Concurrency support library
C++ включает встроенную поддержку потоков, атомарных операций, взаимных исключений, условных переменных и потоково-специфичных хранилищ.
Эти функции предоставляются опционально:
-
если компилятором определена макроконстанта
__STDC_NO_THREADS__, заголовок <threads.h> и все имена, предоставляемые в нём, недоступны; -
если компилятором определена макроконстанта
__STDC_NO_ATOMICS__, заголовок <stdatomic.h> и все имена, предоставляемые в нём, недоступны.
См. также
_Atomic
спецификатор типа и квалификатор
.
Содержание |
Потоки
|
Определено в заголовочном файле
<threads.h>
|
|
thrd_t
|
определяемый реализацией полный объектный тип, идентифицирующий поток |
|
(C11)
|
создает поток
(функция) |
|
(C11)
|
проверяет, ссылаются ли два идентификатора на один и тот же поток
(функция) |
|
(C11)
|
получает идентификатор текущего потока
(функция) |
|
(C11)
|
приостанавливает выполнение вызывающего потока на заданный период времени
(функция) |
|
(C11)
|
отдает текущий квант времени
(функция) |
|
(C11)
|
завершает вызывающий поток
(функция) |
|
(C11)
|
отсоединяет поток
(функция) |
|
(C11)
|
блокируется до завершения потока
(функция) |
|
указывает статус ошибки потока
(константа) |
|
|
thrd_start_t
(C11)
|
typedef типа указателя на функцию
int
(
*
)
(
void
*
)
, используемый
thrd_create
(typedef) |
Атомарные операции
|
Определено в заголовочном файле
<stdatomic.h>
|
|
Операции над атомарными типами |
|
|
указывает, что данный атомарный тип является безблокировочным
(макро-константа) |
|
|
(C11)
|
указывает, является ли атомарный объект свободным от блокировок
(функция) |
|
сохраняет значение в атомарном объекте
(функция) |
|
|
считывает значение из атомарного объекта
(функция) |
|
|
обменивает значение со значением атомарного объекта
(функция) |
|
|
заменяет значение атомарного объекта, если старое значение соответствует ожидаемому, в противном случае считывает старое значение
(функция) |
|
|
атомарное сложение
(функция) |
|
|
атомарное вычитание
(функция) |
|
|
атомное побитовое ИЛИ
(функция) |
|
|
атомическое побитовое исключающее ИЛИ
(функция) |
|
|
атомное побитовое И
(функция) |
|
Тип флага и операции |
|
|
(C11)
|
безблокирующий атомарный булевый флаг
(struct) |
|
устанавливает atomic_flag в true и возвращает предыдущее значение
(функция) |
|
|
устанавливает atomic_flag в false
(функция) |
|
Инициализация |
|
|
(C11)
|
инициализирует существующий атомарный объект
(функция) |
|
(C11)
(устарело в C17)
(удалено в C23)
|
инициализирует новый атомарный объект
(функция-макрос) |
|
(C11)
|
инициализирует новый
atomic_flag
(макрос-константа) |
Порядок синхронизации памяти |
|
|
(C11)
|
определяет ограничения упорядочения памяти
(enum) |
|
(C11)
|
разрывает цепочку зависимостей для
memory_order_consume
(функциональный макрос) |
|
(C11)
|
универсальная примитивная синхронизация барьера, зависящая от порядка памяти
(функция) |
|
(C11)
|
барьер между потоком и обработчиком сигнала, выполняемым в том же потоке
(функция) |
Псевдонимы типов для удобства |
|
| Имя типа-псевдонима | Полное имя типа |
atomic_bool
(C11)
|
_Atomic _Bool (до C23) _Atomic bool (начиная с C23) |
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_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
|
идентификатор мьютекса |
|
(C11)
|
создает мьютекс
(функция) |
|
(C11)
|
блокирует до захвата мьютекса
(функция) |
|
(C11)
|
блокирует до захвата мьютекса или истечения времени
(функция) |
|
(C11)
|
захватывает мьютекс или возвращает управление без блокировки, если уже захвачен
(функция) |
|
(C11)
|
освобождает мьютекс
(функция) |
|
(C11)
|
уничтожает мьютекс
(функция) |
|
(C11)
(C11)
(C11)
|
определяет тип мьютекса
(перечисление) |
Однократный вызов |
|
|
(C11)
|
вызывает функцию ровно один раз
(функция) |
Условные переменные
|
Определено в заголовочном файле
<threads.h>
|
|
cnd_t
|
идентификатор переменной условия |
|
(C11)
|
создает переменную условия
(функция) |
|
(C11)
|
разблокирует один поток, заблокированный на переменной условия
(функция) |
|
(C11)
|
разблокирует все потоки, заблокированные на переменной условия
(функция) |
|
(C11)
|
блокируется на переменной условия
(функция) |
|
(C11)
|
блокируется на переменной условия с таймаутом
(функция) |
|
(C11)
|
уничтожает переменную условия
(функция) |
Тред-локальное хранилище
|
Определено в заголовочном файле
<threads.h>
|
|
|
(C11)
(удалено в C23)
|
удобный макрос для спецификатора класса хранения
_Thread_local
(макрос-ключевое слово) |
tss_t
|
указатель на потоково-специфичное хранилище |
|
(C11)
|
максимальное количество вызовов деструкторов
(макрос-константа) |
tss_dtor_t
(C11)
|
тип указателя на функцию
void
(
*
)
(
void
*
)
, используемый для деструктора TSS
(typedef) |
|
(C11)
|
создает указатель на потоково-специфичное хранилище с заданным деструктором
(функция) |
|
(C11)
|
читает из потоково-специфичного хранилища
(функция) |
|
(C11)
|
записывает в потоково-специфичное хранилище
(функция) |
|
(C11)
|
освобождает ресурсы, удерживаемые заданным потоково-специфичным указателем
(функция) |
Зарезервированные идентификаторы
В будущих редакциях стандарта C:
-
Имена функций, имена типов и константы перечислений, начинающиеся с
cnd_,mtx_,thrd_, илиtss_, и строчной буквы могут быть добавлены в объявления в заголовочном файле<threads.h>; -
Макросы, начинающиеся с
ATOMIC_и прописной буквы могут быть добавлены к макросам, определённым в заголовочном файле <stdatomic.h> ; -
Имена типов, начинающиеся с
atomic_илиmemory_, и строчной буквы могут быть добавлены в объявления в заголовочном файле <stdatomic.h> ; -
Константы перечислений, начинающиеся с
memory_order_и строчной буквы могут быть добавлены в определение типа memory_order в заголовочном файле <stdatomic.h> ; -
Имена функций, начинающиеся с
atomic_и строчной буквы могут быть добавлены в объявления в заголовочном файле <stdatomic.h> .
Идентификаторы, зарезервированные для имен функций, всегда потенциально (since C23) зарезервированы для использования в качестве идентификаторов с внешней линковкой, в то время как другие идентификаторы из этого списка потенциально (since C23) зарезервированы, когда <stdatomic.h> включен.
Объявление, определение или #undef такого идентификатора приводит к неопределённому поведению если он предоставляется стандартом или реализацией (начиная с C23) . Переносимые программы не должны использовать такие идентификаторы.
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 7.17 Атомарные операции <stdatomic.h> (стр.: TBD)
-
- 7.26 Потоки выполнения <threads.h> (стр.: TBD)
-
- 7.31.8 Атомарные операции <stdatomic.h> (стр.: TBD)
-
- 7.31.15 Потоки выполнения <threads.h> (стр.: TBD)
- Стандарт 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)
Смотрите также
|
C++ documentation
для
Concurrency support library
|
Внешние ссылки
| GNU GCC Libc Manual: ISO C Mutexes |