Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 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 . |
| 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 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.
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 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.