std::shared_timed_mutex
Определено в заголовке <shared_mutex> | ||
|---|---|---|
class shared_timed_mutex; | (с C++14) |
Класс shared_timed_mutex — это примитив синхронизации, который может использоваться для защиты общих данных от одновременного доступа нескольких потоков. В отличие от других типов мьютексов, обеспечивающих эксклюзивный доступ, shared_timed_mutex имеет два уровня доступа:
- эксклюзивный — только один поток может владеть мьютексом.
- совместный — несколько потоков могут совместно владеть одним и тем же мьютексом.
Мьютексы совместного доступа обычно используются в ситуациях, когда несколько читателей могут одновременно обращаться к одному и тому же ресурсу, не вызывая гонок данных, но только один писатель может сделать это.
Аналогично 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.
Функции-члены
| создаёт мьютекс (публичная функция-член) |
|
| уничтожает мьютекс (публичная функция-член) |
|
| operator=
[удалена] | не допускает присваивания по значению (публичная функция-член) |
Эксклюзивный захват |
|
| блокирует мьютекс, ожидает, если он недоступен (публичная функция-член) |
|
| пытается захватить мьютекс, возвращается, если он недоступен (публичная функция-член) |
|
| пытается захватить мьютекс, возвращается, если он недоступен в течение заданного интервала (публичная функция-член) |
|
| пытается захватить мьютекс, возвращается, если он недоступен до достижения заданной точки времени (публичная функция-член) |
|
| разблокирует мьютекс (публичная функция-член) |
|
Совместный захват |
|
| блокирует мьютекс для совместного владения, ожидает, если он недоступен (публичная функция-член) |
|
| пытается захватить мьютекс для совместного владения, возвращается, если он недоступен (публичная функция-член) |
|
| пытается захватить мьютекс для совместного владения, возвращается, если он недоступен в течение заданного интервала (публичная функция-член) |
|
| пытается захватить мьютекс для совместного владения, возвращается, если он недоступен до достижения заданной точки времени (публичная функция-член) |
|
| разблокирует мьютекс (совместное владение) (публичная функция-член) |
|
Примечания
| Макросы проверки наличия функции | Значение | Стандарт | Функция |
|---|---|---|---|
__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;
}
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/thread/shared_timed_mutex