std:: shared_timed_mutex
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Exclusive locking | ||||
| Shared locking | ||||
|
Определено в заголовочном файле
<shared_mutex>
|
||
|
class
shared_timed_mutex
;
|
(начиная с C++14) | |
Класс
shared_timed_mutex
является примитивом синхронизации, который может использоваться для защиты общих данных от одновременного доступа несколькими потоками. В отличие от других типов мьютексов, обеспечивающих эксклюзивный доступ,
shared_timed_mutex
имеет два уровня доступа:
- exclusive - только один поток может владеть мьютексом.
- shared - несколько потоков могут совместно владеть одним и тем же мьютексом.
Общие мьютексы обычно используются в ситуациях, когда несколько читателей могут одновременно обращаться к одному ресурсу без возникновения гонки данных, но только один писатель может это делать.
Аналогично
timed_mutex
,
shared_timed_mutex
предоставляет возможность попытки захвата владения
shared_timed_mutex
с таймаутом через функции-члены
try_lock_for()
,
try_lock_until()
,
try_lock_shared_for()
,
try_lock_shared_until()
.
Класс
shared_timed_mutex
удовлетворяет всем требованиям
SharedTimedMutex
и
StandardLayoutType
.
Содержание |
Функции-члены
|
конструирует мьютекс
(public member function) |
|
|
уничтожает мьютекс
(public member function) |
|
|
operator=
[deleted]
|
не копируемый
(public member function) |
Эксклюзивная блокировка |
|
|
блокирует мьютекс, блокируется если мьютекс недоступен
(public member function) |
|
|
пытается заблокировать мьютекс, возвращает управление если мьютекс недоступен
(public member function) |
|
|
пытается заблокировать мьютекс, возвращает управление если мьютекс был
недоступен в течение указанного времени ожидания (public member function) |
|
|
пытается заблокировать мьютекс, возвращает управление если мьютекс был
недоступен до достижения указанной точки времени (public member function) |
|
|
разблокирует мьютекс
(public member function) |
|
Разделяемая блокировка |
|
|
блокирует мьютекс для разделяемого владения, блокируется если мьютекс недоступен
(public member function) |
|
|
пытается заблокировать мьютекс для разделяемого владения, возвращает управление если мьютекс недоступен
(public member function) |
|
|
пытается заблокировать мьютекс для разделяемого владения, возвращает управление если мьютекс был
недоступен в течение указанного времени ожидания (public member function) |
|
|
пытается заблокировать мьютекс для разделяемого владения, возвращает управление если мьютекс был
недоступен до достижения указанной точки времени (public member function) |
|
|
разблокирует мьютекс (разделяемое владение)
(public member function) |
|
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_shared_timed_mutex
|
201402L
|
(C++14) |
std::shared_timed_mutex
|
Пример
|
Этот раздел не завершён
Причина: создать мотивирующий пример |
Оператор копирующего присваивания для класса, который управляет ресурсами с поддержкой множественного чтения, но единственной записи.
#include <mutex> #include <shared_mutex> class R { mutable std::shared_timed_mutex mut; /* data */ public: R& operator=(const R& other) { // requires exclusive ownership to write to *this std::unique_lock<std::shared_timed_mutex> lhs(mut, std::defer_lock); // requires shared ownership to read from other std::shared_lock<std::shared_timed_mutex> rhs(other.mut, std::defer_lock); std::lock(lhs, rhs); /* assign data */ return *this; } }; int main() { R r; }