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.
Member
Ö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 verbleibenden 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
.