Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.