Spec-Zone.ru › C++

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=
[удалена]
не допускает присваивания по значению
(публичная функция-член)
Эксклюзивный захват
lock
блокирует мьютекс, ожидает, если он недоступен
(публичная функция-член)
try_lock
пытается захватить мьютекс, возвращается, если он недоступен
(публичная функция-член)
try_lock_for
пытается захватить мьютекс, возвращается, если он недоступен в течение заданного интервала
(публичная функция-член)
try_lock_until
пытается захватить мьютекс, возвращается, если он недоступен до достижения заданной точки времени
(публичная функция-член)
unlock
разблокирует мьютекс
(публичная функция-член)
Совместный захват
lock_shared
блокирует мьютекс для совместного владения, ожидает, если он недоступен
(публичная функция-член)
try_lock_shared
пытается захватить мьютекс для совместного владения, возвращается, если он недоступен
(публичная функция-член)
try_lock_shared_for
пытается захватить мьютекс для совместного владения, возвращается, если он недоступен в течение заданного интервала
(публичная функция-член)
try_lock_shared_until
пытается захватить мьютекс для совместного владения, возвращается, если он недоступен до достижения заданной точки времени
(публичная функция-член)
unlock_shared
разблокирует мьютекс (совместное владение)
(публичная функция-член)

Примечания

Макросы проверки наличия функции Значение Стандарт Функция
__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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API