<mutex>
Includere l'intestazione <mutex>
standard per definire le mutex
classi , recursive_mutex
, timed_mutex
e recursive_timed_mutex
, i modelli lock_guard
e unique_lock
; e i tipi e le funzioni di supporto che definiscono aree di codice di esclusione reciproca.
Avviso
A partire da Visual Studio 2015, i tipi di sincronizzazione della libreria standard C++ sono basati su primitive di sincronizzazione di Windows e non usano più ConcRT (tranne quando la piattaforma di destinazione è Windows XP). I tipi definiti in <mutex>
non devono essere usati con qualsiasi tipo o funzione ConcRT.
Requisiti
Intestazione: <mutex>
Spazio dei nomi: std
Osservazioni:
Nota
Nel codice compilato tramite /clr
, questa intestazione è bloccata.
Le classi mutex
e recursive_mutex
sono tipi mutex. Un tipo mutex ha un costruttore predefinito e un distruttore che non genera eccezioni. Questi oggetti dispongono di metodi che forniscono l'esclusione reciproca quando più thread tentano di bloccare l'oggetto stesso. In particolare, un tipo mutex contiene i metodi lock
, try_lock
e unlock
:
Il metodo
lock
blocca il thread chiamante finché il thread non diventa proprietario del mutex. Il valore restituito viene ignorato.Il metodo
try_lock
tenta di ottenere la proprietà del tipo mutex senza blocco. Il tipo restituito è convertibile inbool
etrue
se il metodo ottiene la proprietà, mentre altrimenti èfalse
.Il metodo
unlock
rilascia la proprietà del tipo mutex dal thread chiamante.
È possibile utilizzare i tipi di mutex come argomenti di tipo per creare i modelli lock_guard
e unique_lock
. È possibile usare oggetti di questi tipi come Lock
argomento per le funzioni membro di attesa nel modello condition_variable_any
.
Un tipo mutex programmato soddisfa i requisiti per un tipo mutex. Inoltre, includi i metodi try_lock_for
e try_lock_until
che devono essere richiamabili tramite un argomento e devono restituire un tipo convertibile in bool
. Un tipo di mutex programmato consente di definire queste funzioni con argomenti aggiuntivi, purché tali argomenti aggiuntivi dispongano tutti di valori predefiniti.
Il
try_lock_for
metodo deve essere chiamabile usando un argomento ,Rel_time
il cui tipo è un'istanza dichrono::duration
. Il metodo tenta di ottenere la proprietà del tipo mutex, ma restituisce un risultato entro l'orario indicato daRel_time
, indipendentemente dall'esito. Il valore restituito viene convertito intrue
se il metodo ottiene la proprietà; in caso contrario, il valore restituito viene convertito infalse
.Il
try_lock_until
metodo deve essere chiamabile usando un argomento ,Abs_time
il cui tipo è un'istanza dichrono::time_point
. Il metodo tenta di ottenere la proprietà del tipo mutex, ma restituisce un risultato entro e non oltre l'orario indicato daAbs_time
, indipendentemente dall'esito. Il valore restituito viene convertito intrue
se il metodo ottiene la proprietà; in caso contrario, il valore restituito viene convertito infalse
.
Un tipo mutex è noto anche come tipo bloccabile. Se non fornisce la funzione try_lock
membro , si tratta di un tipo bloccabile di base. Un tipo mutex timed è noto come tipo bloccabile a temporizzato. Blocchi di tipo bloccabili a tempo per un periodo di tempo specificato o fino a quando non viene acquisito un blocco sul mutex.
Membri
Classi
Nome | Descrizione |
---|---|
lock_guard Classe |
Rappresenta un modello di cui è possibile creare un'istanza per creare un oggetto il cui distruttore sblocca un mutex. |
mutex Classe (libreria standard C++) |
Rappresenta un tipo mutex. Gli oggetti di questo tipo possono essere utilizzati per gestire l'esclusione reciproca in un programma. |
recursive_mutex Classe |
Rappresenta un tipo mutex. A differenza della mutex classe , il comportamento della chiamata di metodi di blocco per gli oggetti già bloccati è ben definito. |
recursive_timed_mutex Classe |
Gli oggetti di questo tipo possono essere utilizzati per gestire l'esclusione reciproca con un blocco a tempo limitato all’interno di un programma. A differenza timed_mutex di , l'effetto della chiamata di metodi di blocco per recursive_timed_mutex gli oggetti è ben definito. |
scoped_lock Classe |
|
timed_mutex Classe |
Gli oggetti di questo tipo possono essere utilizzati per gestire l'esclusione reciproca con un blocco a tempo limitato all’interno di un programma. |
unique_lock Classe |
Rappresenta un modello di cui è possibile creare un'istanza per creare oggetti che gestiscono il blocco e lo sblocco di un mutex. |
Funzioni
Nome | Descrizione |
---|---|
call_once |
Fornisce un meccanismo per chiamare un oggetto richiamabile esattamente una sola volta l'esecuzione. |
lock |
Tenta di bloccare tutti gli argomenti senza deadlock. |
swap |
Tenta di scambiare gli stati interni di due mutex oggetti x e y . |
try_lock |
Tenta di bloccare l'oggetto bloccabile. Restituisce immediatamente. |
Struct
Nome | Descrizione |
---|---|
adopt_lock_t Struttura |
Rappresenta un tipo che viene utilizzato per definire un adopt_lock . |
defer_lock_t Struttura |
Rappresenta un tipo che definisce un oggetto defer_lock che consente di selezionare uno dei costruttori di overload di unique_lock . |
once_flag Struttura |
Rappresenta una struct utilizzata con la funzione di modello call_once per garantire che il codice di inizializzazione venga richiamato una sola volta, anche in presenza di più thread di esecuzione. |
try_to_lock_t Struttura |
Rappresenta una struct che definisce un oggetto try_to_lock utilizzato per selezionare uno dei costruttori di overload di unique_lock . |
Variabili
Nome | Descrizione |
---|---|
adopt_lock |
Rappresenta un oggetto che può essere passato ai costruttori per lock_guard e unique_lock per indicare che l'oggetto mutex che viene passato anche al costruttore è bloccato. |
defer_lock |
Rappresenta un oggetto che può essere passato al costruttore per , per unique_lock indicare che il costruttore non deve bloccare l'oggetto mutex che viene passato anche a esso. |
try_to_lock |
Rappresenta un oggetto che può essere passato al costruttore per per unique_lock indicare che il costruttore deve tentare di sbloccare l'oggetto mutex passato senza bloccarlo. |