Именованные требования C++: BasicLockable (начиная с C++11)
Требования BasicLockable описывают минимальные характеристики типов, обеспечивающих семантику блокирующего взаимоисключающего доступа для агентов выполнения (то есть потоков).
Требования
Чтобы тип L соответствовал требованиям BasicLockable, для объекта m типа L должны выполняться следующие условия:
| Выражение | Предварительные условия | Эффекты |
|---|---|---|
m.lock() | Блокирует выполнение до тех пор, пока текущий агент выполнения (поток, процесс, задача) не сможет получить блокировку. Если выбрасывается исключение, блокировка не устанавливается. | |
m.unlock() | Текущий агент выполнения удерживает эксклюзивную блокировку на m. | Снимает эксклюзивную блокировку, удерживаемую агентом выполнения. Не выбрасывает исключений. |
Эксклюзивные блокировки
Блокировка объекта называется эксклюзивной блокировкой, если она установлена вызовом функции-члена lock, try_lock, try_lock_for или try_lock_until.
Стандартная библиотека
Следующие типы стандартной библиотеки соответствуют требованиям BasicLockable:
|
(C++11) | предоставляет базовые средства взаимного исключения (класс) |
|
(C++11) | предоставляет средства взаимного исключения с рекурсивной блокировкой одним и тем же потоком (класс) |
|
(C++11) | предоставляет средства взаимного исключения с рекурсивной блокировкой одним и тем же потоком и поддерживает блокировку с тайм-аутом (класс) |
|
(C++17) | предоставляет средства совместного взаимоисключения (класс) |
|
(C++14) | предоставляет средства совместного взаимоисключения и поддерживает блокировку с тайм-аутом (класс) |
|
(C++11) | предоставляет средства взаимного исключения с блокировкой по тайм-ауту (класс) |
См. также
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/BasicLockable