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
.
Elementy członkowskie
Definicje typów publicznych
Nazwa/nazwisko | opis |
---|---|
mutex_type |
Synonim argumentu Mutex szablonu . |
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 mutex wątku . |
mutex | Pobiera przechowywany wskaźnik do skojarzonego mutex elementu . |
owns_lock | Określa, czy wątek wywołujący jest właścicielem skojarzonego mutex elementu . |
zwolnić | Usuwa skojarzenie unique_lock obiektu ze skojarzonego mutex obiektu. |
zamiana | 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 mutex elementu . |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
operator bool | Określa, czy wątek wywołujący ma własność skojarzonego mutex elementu . |
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 mutex
wą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 mutex
elementu , 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 mutex
elementu .
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 mutex
obiekcie , 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 mutex
elementu .
bool owns_lock() const noexcept;
Wartość zwracana
true
jeśli wątek jest właścicielem mutex
; w przeciwnym razie false
.
zwolnić
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 false
wartość .
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 mutex
metody , metoda zgłasza system_error
kod resource_deadlock_would_occur
błę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 mutex
metody , metoda zgłasza system_error
kod resource_deadlock_would_occur
błę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 mutex
metody , metoda zgłasza system_error
kod resource_deadlock_would_occur
błę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 mutex
obiektu , destruktor zwalnia własność przez wywołanie odblokowywania na mutex
obiekcie.
Odblokować
Zwalnia własność skojarzonego mutex
elementu .
void unlock();
Uwagi
Jeśli wątek wywołujący nie jest właścicielem skojarzonego mutex
elementu , 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
.