Namespaces
Variants

std:: shared_timed_mutex

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
shared_timed_mutex
(C++14)
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
Определено в заголовочном файле <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;
}