Freigeben über


unique_lock-Klasse

Stellt eine Vorlage dar, die zum Erstellen von Objekten instanziiert werden kann, die das Sperren und Entsperren von mutex verwalten.

Syntax

template <class Mutex>
class unique_lock;

Hinweise

Das Vorlagenargument Mutex muss einen Mutex-Typ benennen.

Intern speichert ein unique_lock einen Zeiger auf ein zugeordnetes mutex-Objekt und einen bool, der angibt, ob der aktuelle Thread das mutex besitzt.

Mitglieder

Öffentliche Typedefs

Name Beschreibung
mutex_type Synonym für das Vorlagenargument Mutex.

Öffentliche Konstruktoren

Name Beschreibung
unique_lock Erstellt ein unique_lock-Objekt.
~unique_lock-Destruktor Gibt alle Ressourcen frei, die dem unique_lock-Objekt zugeordnet sind.

Öffentliche Methoden

Name Beschreibung
lock Blockiert den aufrufenden Thread, bis der Thread in den Besitz des zugeordneten mutex gelangt.
mutex Ruft den gespeicherten Zeiger auf das zugeordnete mutex auf.
owns_lock Gibt an, ob der aufrufende Thread das zugeordnete mutex besitzt.
release Trennt das unique_lock-Objekt vom zugeordneten mutex-Objekt.
swap Tauscht das zugeordnete mutex und den Besitzstatus mit dem eines angegebenen Objekts.
try_lock Versucht, ohne Blockierung in den Besitz des verknüpften mutex zu gelangen.
try_lock_for Versucht, ohne Blockierung in den Besitz des verknüpften mutex zu gelangen.
try_lock_until Versucht, ohne Blockierung in den Besitz des verknüpften mutex zu gelangen.
unlock Gibt den Besitz des zugeordneten mutex frei.

Öffentliche Operatoren

Name Beschreibung
operator bool Gibt an, ob der anrufende Thread das zugeordnete mutex besitzt.
operator= Kopiert den gespeicherten mutex-Zeiger und den zugehörigen Besitzstatus aus einem angegebenen Objekt.

Vererbungshierarchie

unique_lock

Anforderungen

Header:<mutex>

Namespace: std

lock

Blockiert den aufrufenden Thread, bis der Thread in den Besitz des zugeordneten mutex gelangt.

void lock();

Hinweise

Wenn der gespeicherte mutex Zeiger NULL ist, löst diese Methode eine system_error aus, die über einen Fehlercode verfügt operation_not_permitted.

Wenn der aufrufende Thread das zugeordnete mutex bereits besitzt, löst diese Methode einen system_error aus, der den Fehlercode resource_deadlock_would_occur hat.

Andernfalls ruft diese Methode lock auf dem zugeordneten mutex auf und setzt das interne Ownershipflag des Threads auf true.

mutex

Ruft den gespeicherten Zeiger auf das zugeordnete mutex auf.

mutex_type *mutex() const noexcept;

operator bool

Gibt an, ob der aufrufende Thread das zugeordnete Mutex besitzt.

explicit operator bool() noexcept

Rückgabewert

true wenn der Thread das Mutex besitzt; andernfalls false.

operator =

Kopiert den gespeicherten mutex-Zeiger und den zugehörigen Besitzstatus aus einem angegebenen Objekt.

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

Parameter

Andere
Ein unique_lock-Objekt.

Rückgabewert

*this

Bemerkungen

Wenn der aufrufende Thread das zuvor zugeordnete mutex besitzt, weist diese Methode die neuen Werte zu, bevor sie unlock auf dem mutex aufruft.

Nach der Kopie legt diese Methode "Other " auf einen standard konstruierten Zustand fest.

owns_lock

Gibt an, ob der aufrufende Thread das zugeordnete mutex besitzt.

bool owns_lock() const noexcept;

Rückgabewert

true wenn der Thread das mutex besitzt; andernfalls false.

Freigabe

Trennt das unique_lock-Objekt vom zugeordneten mutex-Objekt.

mutex_type *release() noexcept;

Rückgabewert

Der vorherige Wert des gespeicherten mutex-Zeigers.

Hinweise

Diese Methode setzt den Wert des gespeicherten mutex-Zeigers auf 0 und das interne mutex-Ownershipflag auf false.

swap

Tauscht das zugeordnete mutex und den Besitzstatus mit dem eines angegebenen Objekts.

void swap(unique_lock& Other) noexcept;

Parameter

Andere
Ein unique_lock-Objekt.

try_lock

Versucht, ohne Blockierung in den Besitz des verknüpften mutex zu gelangen.

bool try_lock() noexcept;

Rückgabewert

true, wenn die Methode erfolgreich in den Besitz von mutex gelangt; andernfalls false.

Hinweise

Wenn der gespeicherte mutex Zeiger NULL ist, löst die Methode eine system_error aus, die einen Fehlercode aufweist operation_not_permitted.

Wenn der aufrufende Thread das mutex bereits besitzt, löst die Methode einen system_error aus, der den Fehlercode resource_deadlock_would_occur hat.

try_lock_for

Versucht, ohne Blockierung in den Besitz des verknüpften mutex zu gelangen.

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

Parameter

Rel_time
Ein chrono::duration-Objekt, das angibt, wie lange die Methode höchstens versucht, in den Besitz von mutex zu gelangen.

Rückgabewert

true, wenn die Methode erfolgreich in den Besitz von mutex gelangt; andernfalls false.

Hinweise

Wenn der gespeicherte mutex Zeiger NULL ist, löst die Methode eine system_error aus, die einen Fehlercode aufweist operation_not_permitted.

Wenn der aufrufende Thread das mutex bereits besitzt, löst die Methode einen system_error aus, der den Fehlercode resource_deadlock_would_occur hat.

try_lock_until

Versucht, ohne Blockierung in den Besitz des verknüpften mutex zu gelangen.

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);

Parameter

Abs_time
Ein Zeitpunkt, der den Schwellenwert angibt, nach dem die Methode nicht mehr versucht, in den Besitz von mutex zu gelangen.

Rückgabewert

true, wenn die Methode erfolgreich in den Besitz von mutex gelangt; andernfalls false.

Hinweise

Wenn der gespeicherte mutex Zeiger NULL ist, löst die Methode eine system_error aus, die einen Fehlercode aufweist operation_not_permitted.

Wenn der aufrufende Thread das mutex bereits besitzt, löst die Methode einen system_error aus, der den Fehlercode resource_deadlock_would_occur hat.

unique_lock-Konstruktor

Erstellt ein unique_lock-Objekt.

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;

Parameter

Mtx
Ein mutex type-Objekt.

Rel_time
Ein chrono::duration-Objekt, das angibt, wie lange die Methode höchstens versucht, in den Besitz von mutex zu gelangen.

Abs_time
Ein Zeitpunkt, der den Schwellenwert angibt, nach dem die Methode nicht mehr versucht, in den Besitz von mutex zu gelangen.

Andere
Ein unique_lock-Objekt.

Hinweise

Der erste Konstruktor erstellt ein Objekt, das den zugeordneten Mutexzeigerwert 0 hat.

Der zweite Konstruktor verschiebt den zugeordneten Mutex-Status aus "Other". Nach der Verschiebung ist "Other " nicht mehr mit einem Mutex verknüpft.

Die neu Standard Konstruktoren speichern & Mtx als gespeicherten mutex Zeiger. Der Besitz des mutex wird durch das zweite Argument bestimmt, falls vorhanden.

Name Beschreibung
No argument Der Besitz wird durch Aufrufen der lock-Methode auf dem zugeordneten mutex-Objekt erlangt.
Adopt Der Besitz wird angenommen. Mtx muss gesperrt sein, wenn der Konstruktor aufgerufen wird.
Defer Es wird davon ausgegangen, dass der aufrufende Thread das mutex-Objekt nicht besitzt. Mtx darf nicht gesperrt sein, wenn der Konstruktor aufgerufen wird.
Try Der Besitz wird durch Aufrufen von try_lock auf dem zugeordneten mutex-Objekt bestimmt. Der Konstruktor löst nichts aus.
Rel_time Der Besitz wird durch Aufrufen von try_lock_for(Rel_time) bestimmt.
Abs_time Der Besitz wird durch Aufrufen von try_lock_until(Abs_time) bestimmt.

~unique_lock-Destruktor

Gibt alle Ressourcen frei, die dem unique_lock-Objekt zugeordnet sind.

~unique_lock() noexcept;

Hinweise

Wenn der aufrufende Thread das zugehörige mutex besitzt, gibt der Destruktor den Besitz durch Aufrufen von unlock auf dem mutex-Objekt frei.

Entsperren

Gibt den Besitz des zugeordneten mutex frei.

void unlock();

Hinweise

Wenn der aufrufende Thread das zugeordnete mutex nicht besitzt, löst diese Methode einen system_error aus, der den Fehlercode operation_not_permitted hat.

Andernfalls ruft diese Methode unlock auf dem zugeordneten mutex auf und setzt das interne Ownershipflag des Threads auf false.

Siehe auch

Headerdateienreferenz
<mutex>