Библиотека поддержки конкурентности
C включает в себя встроенную поддержку потоков, атомарных операций, взаимное исключение, условные переменные и специфичные для потоков классы памяти.
Эти возможности предоставляются опционально:
- если константа-макрос
__STDC_NO_THREADS__определена компилятором, то заголовочный файл<threads.h>и все имена в нём не предоставляются; - если константа-макрос
__STDC_NO_ATOMICS__определена компилятором, то заголовочный файл<stdatomic.h>и все имена в нём не предоставляются.
Потоки
Определены в заголовочном файле
<threads.h> | |
thrd_t
|
определённый реализацией полный тип объекта, идентифицирующего поток |
(C11) |
создаёт поток (функция) |
(C11) |
проверяет, ссылаются ли два идентификатора на один и тот же поток (функция) |
(C11) |
получает идентификатор текущего потока (функция) |
(C11) |
приостанавливает исполнение вызывающего потока на заданный период времени (функция) |
(C11) |
вырабатывает текущий срез времени (функция) |
(C11) |
завершает вызывающий поток (функция) |
(C11) |
обособляет поток (функция) |
(C11) |
блокирует, пока поток не завершится (функция) |
| сообщает статус ошибки потока (константа) | |
thrd_start_t (C11) |
определение типа указателя на функцию int(*)(void*), используемого в thrd_create (определение типа) |
Атомарные операции
Определены в заголовочном файле
<stdatomic.h> | |
Операции с атомарными типами | |
указывает, что данный тип атомного без блокировок Оригинал: indicates that the given atomic type is lock-free Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (макроконстанта) | |
(C11) |
указывает, является ли атомная объекта без блокировок Оригинал: 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. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) | |
Типы флагов и операции | |
(C11) |
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. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) | |
Инициализация | |
(C11) |
initializes an existing atomic object (функция) |
(C11) |
инициализирует новый атомный объект Оригинал: initializes a new atomic object Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция-макрос) |
(C11) |
инициализирует новый atomic_flag Оригинал: initializes a new atomic_flag Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (макроконстанта) |
Порядок синхронизации памяти | |
(C11) |
определяет памяти заказе ограничений Оригинал: defines memory ordering constraints Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (перечисление) |
(C11) |
разбивает цепочку зависимостей для memory_order_consume Оригинал: breaks a dependency chain for memory_order_consume Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция-макрос) |
(C11) |
общая память зависит от порядка синхронизации забор примитивной Оригинал: generic memory order-dependent fence synchronization primitive Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
забор между нитью и обработчик сигнала выполняется в том же потоке Оригинал: 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
|
идентификатор мьютекса |
(C11) |
создает мьютекс Оригинал: creates a mutex Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
блокирует, пока не захватит мьютекс (функция) |
(C11) |
Блокирует до захвата мьютекса или тайм-аута (функция) |
(C11) |
Неблокирующий захват мьютекса (функция) |
(C11) |
разблокирует мьютекс Оригинал: unlocks a mutex Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
разрушает мьютекс Оригинал: destroys a mutex Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C++11)(C++11)(C++11) |
определяет тип мьютекса Оригинал: defines the type of a mutex Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (перечисление) |
Однократный вызов | |
(C11) |
вызывает функцию только один раз Оригинал: calls a function exactly once Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
Условные переменные
Определены в заголовочном файле
<threads.h> | |
cnd_t
|
condition variable identifier |
(C11) |
создает условия переменной Оригинал: creates a condition variable Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
разблокирует один поток заблокирован на переменной условия Оригинал: unblocks one thread blocked on a condition variable Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
разблокирует все темы заблокирован на переменной условия Оригинал: unblocks all threads blocked on a condition variable Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
блоки на переменной условия Оригинал: blocks on a condition variable Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
блоки на переменной условия, при тайм-аут Оригинал: blocks on a condition variable, with a timeout Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
разрушает переменной условия Оригинал: destroys a condition variable Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
Локальные для потока классы памяти
Определены в заголовочном файле
<threads.h> | |
(C11) |
Тема местные макро типа Оригинал: thread local type macro Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (макроконстанта) |
tss_t
|
конкретного потока хранения указателей
Оригинал: thread-specific storage pointer Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
(C11) |
Максимальное количество деструкторов раз называют Оригинал: maximum number of times destructors are called Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (макроконстанта) |
tss_dtor_t
|
function pointer type used for TSS destructor |
(C11) |
creates thread-specific storage pointer with a given destructor (функция) |
(C11) |
считывает данные из конкретного потока хранения Оригинал: reads from thread-specific storage Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
писать для конкретного потока хранения Оригинал: write to thread-specific storage Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (функция) |
(C11) |
освобождает ресурсы, занятые данного конкретного потока указатель Оригинал: 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)
См. также
Документация C++ по библиотеке поддержки параллелизма
|
Внешние ссылки
| Руководство по GNU GCC: мьютексы ISO C |