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=
[deleted] | копирующее присваивание не поддерживается (открытая функция-член) |
Исключительная блокировка |
|
| блокирует мьютекс; если мьютекс недоступен, ожидает (открытая функция-член) |
|
| пытается заблокировать мьютекс; возвращает управление, если мьютекс недоступен (открытая функция-член) |
|
| пытается заблокировать мьютекс; возвращает управление, если мьютекс был недоступен в течение указанного интервала времени (открытая функция-член) |
|
| пытается заблокировать мьютекс; возвращает управление, если мьютекс оставался недоступным до наступления указанного момента времени (открытая функция-член) |
|
| снимает блокировку мьютекса (открытая функция-член) |
|
Общая блокировка |
|
| блокирует мьютекс для общего владения; если мьютекс недоступен, ожидает (открытая функция-член) |
|
| пытается заблокировать мьютекс для общего владения; возвращает управление, если мьютекс недоступен (открытая функция-член) |
|
| пытается заблокировать мьютекс для общего владения; возвращает управление, если мьютекс был недоступен в течение указанного интервала времени (открытая функция-член) |
|
| пытается заблокировать мьютекс для общего владения; возвращает управление, если мьютекс оставался недоступным до наступления указанного момента времени (открытая функция-член) |
|
| снимает блокировку мьютекса (общее владение) (открытая функция-член) |
|
Примечания
| Макрос проверки поддержки функции | Значение | Стандарт | Функция |
|---|---|---|---|
__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/cpp/thread/shared_timed_mutex