Udostępnij za pośrednictwem


unique_lock — Klasa

Reprezentuje szablon, który można utworzyć wystąpienia w celu utworzenia obiektów, które zarządzają blokowaniem i odblokowywaniem obiektu mutex.

Składnia

template <class Mutex>
class unique_lock;

Uwagi

Argument Mutex szablonu musi nazwać typ mutex.

Wewnętrznie element unique_lock przechowuje wskaźnik do skojarzonego mutex obiektu i element bool , który wskazuje, czy bieżący wątek jest właścicielem mutex.

Członkowie

Definicje typów publicznych

Nazwa/nazwisko opis
mutex_type Synonim argumentu Mutexszablonu .

Konstruktory publiczne

Nazwa/nazwisko opis
unique_lock unique_lock Tworzy obiekt.
~unique_lock Destruktor Zwalnia wszystkie zasoby skojarzone z obiektem unique_lock .

Metody publiczne

Nazwa/nazwisko opis
lock Blokuje wątek wywołujący do momentu uzyskania własności skojarzonego mutexwątku .
Mutex Pobiera przechowywany wskaźnik do skojarzonego mutexelementu .
owns_lock Określa, czy wątek wywołujący jest właścicielem skojarzonego mutexelementu .
Wydania Usuwa skojarzenie unique_lock obiektu ze skojarzonego mutex obiektu.
Wymiany Zamienia skojarzony stan i mutex własność z określonym obiektem.
try_lock Próbuje uzyskać własność skojarzonego mutex obiektu bez blokowania.
try_lock_for Próbuje uzyskać własność skojarzonego mutex obiektu bez blokowania.
try_lock_until Próbuje uzyskać własność skojarzonego mutex obiektu bez blokowania.
Odblokować Zwalnia własność skojarzonego mutexelementu .

Operatory publiczne

Nazwa/nazwisko opis
operator bool Określa, czy wątek wywołujący ma własność skojarzonego mutexelementu .
operator = Kopiuje przechowywany mutex wskaźnik i skojarzony stan własności z określonego obiektu.

Hierarchia dziedziczenia

unique_lock

Wymagania

Nagłówek:<mutex>

Przestrzeń nazw: std

lock

Blokuje wątek wywołujący do momentu uzyskania własności skojarzonego mutexwątku .

void lock();

Uwagi

Jeśli przechowywany mutex wskaźnik ma wartość NULL, ta metoda zgłasza system_error z kodem błędu operation_not_permitted.

Jeśli wątek wywołujący jest już właścicielem skojarzonego mutexelementu , ta metoda zgłasza system_error kod błędu resource_deadlock_would_occur.

W przeciwnym razie ta metoda wywołuje lock skojarzona i mutex ustawia flagę własności wątku wewnętrznego na true.

Mutex

Pobiera przechowywany wskaźnik do skojarzonego mutexelementu .

mutex_type *mutex() const noexcept;

operator bool

Określa, czy wątek wywołujący ma własność skojarzonego mutexu.

explicit operator bool() noexcept

Wartość zwracana

true jeśli wątek jest właścicielem mutexu; w przeciwnym razie false.

operator =

Kopiuje przechowywany mutex wskaźnik i skojarzony stan własności z określonego obiektu.

unique_lock& operator=(unique_lock&& Other) noexcept;

Parametry

Inne
Obiekt unique_lock.

Wartość zwracana

*this

Uwagi

Jeśli wątek wywołujący jest właścicielem wcześniej skojarzonej metody mutex, przed wywołaniem unlock tej metody na mutexobiekcie , przypisuje nowe wartości.

Po skopiowaniu ta metoda ustawia wartość Other na domyślny stan.

owns_lock

Określa, czy wątek wywołujący jest właścicielem skojarzonego mutexelementu .

bool owns_lock() const noexcept;

Wartość zwracana

true jeśli wątek jest właścicielem mutex; w przeciwnym razie false.

Wydania

Usuwa skojarzenie unique_lock obiektu ze skojarzonego mutex obiektu.

mutex_type *release() noexcept;

Wartość zwracana

Poprzednia wartość przechowywanego mutex wskaźnika.

Uwagi

Ta metoda ustawia wartość przechowywanego mutex wskaźnika na 0 i ustawia flagę własności wewnętrznej mutex na falsewartość .

swap

Zamienia skojarzony stan i mutex własność z określonym obiektem.

void swap(unique_lock& Other) noexcept;

Parametry

Inne
Obiekt unique_lock.

try_lock

Próbuje uzyskać własność skojarzonego mutex obiektu bez blokowania.

bool try_lock() noexcept;

Wartość zwracana

true jeśli metoda pomyślnie uzyskuje własność mutex; w przeciwnym razie false, .

Uwagi

Jeśli przechowywany mutex wskaźnik ma wartość NULL, metoda zgłasza system_error z kodem błędu operation_not_permitted.

Jeśli wątek wywołujący jest już właścicielem mutexmetody , metoda zgłasza system_error kod resource_deadlock_would_occurbłędu .

try_lock_for

Próbuje uzyskać własność skojarzonego mutex obiektu bez blokowania.

template <class Rep, class Period>
bool try_lock_for(
    const chrono::duration<Rep, Period>& Rel_time);

Parametry

Rel_time
Obiekt chrono::d uration określający maksymalny czas próby uzyskania własności obiektu mutex.

Wartość zwracana

true jeśli metoda pomyślnie uzyskuje własność mutex; w przeciwnym razie false, .

Uwagi

Jeśli przechowywany mutex wskaźnik ma wartość NULL, metoda zgłasza system_error z kodem błędu operation_not_permitted.

Jeśli wątek wywołujący jest już właścicielem mutexmetody , metoda zgłasza system_error kod resource_deadlock_would_occurbłędu .

try_lock_until

Próbuje uzyskać własność skojarzonego mutex obiektu bez blokowania.

template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, Duration>& Abs_time);

bool try_lock_until(const xtime* Abs_time);

Parametry

Abs_time
Punkt w czasie określający próg, po którym metoda nie próbuje już uzyskać własności obiektu mutex.

Wartość zwracana

true jeśli metoda pomyślnie uzyskuje własność mutex; w przeciwnym razie false, .

Uwagi

Jeśli przechowywany mutex wskaźnik ma wartość NULL, metoda zgłasza system_error z kodem błędu operation_not_permitted.

Jeśli wątek wywołujący jest już właścicielem mutexmetody , metoda zgłasza system_error kod resource_deadlock_would_occurbłędu .

konstruktor unique_lock

unique_lock Tworzy obiekt.

unique_lock() noexcept;
unique_lock(unique_lock&& Other) noexcept;
explicit unique_lock(mutex_type& Mtx);

unique_lock(mutex_type& Mtx, adopt_lock_t Adopt);

unique_lock(mutex_type& Mtx, defer_lock_t Defer) noexcept;
unique_lock(mutex_type& Mtx, try_to_lock_t Try);

template <class Rep, class Period>
unique_lock(mutex_type& Mtx,
    const chrono::duration<Rep, Period>
Rel_time);

template <class Clock, class Duration>
unique_lock(mutex_type& Mtx,
    const chrono::time_point<Clock, Duration>
Abs_time);

unique_lock(mutex_type& Mtx,
    const xtime* Abs_time) noexcept;

Parametry

Mtx
Obiekt typu mutex.

Rel_time
Obiekt chrono::d uration określający maksymalny czas próby uzyskania własności obiektu mutex.

Abs_time
Punkt w czasie określający próg, po którym metoda nie próbuje już uzyskać własności obiektu mutex.

Inne
Obiekt unique_lock.

Uwagi

Pierwszy konstruktor tworzy obiekt, który ma skojarzoną wartość wskaźnika mutex 0.

Drugi konstruktor przenosi skojarzony stan mutex z other. Po przeniesieniu inne nie są już skojarzone z mutex.

Pozostałe konstruktory przechowują i mtx jako przechowywany mutex wskaźnik. Własność obiektu mutex jest określana przez drugi argument, jeśli istnieje.

Nazwa/nazwisko opis
No argument Własność jest uzyskiwana przez wywołanie lock metody w skojarzonym mutex obiekcie.
Adopt Przyjmuje się, że własność. Mtx należy zablokować, gdy konstruktor jest wywoływany.
Defer Zakłada się, że wątek wywołujący nie jest właścicielem mutex obiektu. Mtx nie może być zablokowany, gdy wywoływany jest konstruktor.
Try Własność jest określana przez wywołanie try_lock skojarzonego mutex obiektu. Konstruktor nie zgłasza niczego.
Rel_time Własność jest określana przez wywołanie metody try_lock_for(Rel_time).
Abs_time Własność jest określana przez wywołanie metody try_lock_until(Abs_time).

~unique_lock Destruktor

Zwalnia wszystkie zasoby skojarzone z obiektem unique_lock .

~unique_lock() noexcept;

Uwagi

Jeśli wątek wywołujący jest właścicielem skojarzonego mutexobiektu , destruktor zwalnia własność przez wywołanie odblokowywania na mutex obiekcie.

Odblokować

Zwalnia własność skojarzonego mutexelementu .

void unlock();

Uwagi

Jeśli wątek wywołujący nie jest właścicielem skojarzonego mutexelementu , ta metoda zgłasza system_error z kodem błędu operation_not_permitted.

W przeciwnym razie ta metoda wywołuje unlock skojarzona i mutex ustawia flagę własności wątku wewnętrznego na false.

Zobacz też

Odwołanie do plików nagłówka
<Mutex>