<mutex>

Includere l'intestazione <mutex> standard per definire le mutexclassi , recursive_mutex, timed_mutexe 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 in bool e true 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_timeil cui tipo è un'istanza di chrono::duration. Il metodo tenta di ottenere la proprietà del tipo mutex, ma restituisce un risultato entro l'orario indicato da Rel_time, indipendentemente dall'esito. Il valore restituito viene convertito in true se il metodo ottiene la proprietà; in caso contrario, il valore restituito viene convertito in false.

  • Il try_lock_until metodo deve essere chiamabile usando un argomento , Abs_timeil cui tipo è un'istanza di chrono::time_point. Il metodo tenta di ottenere la proprietà del tipo mutex, ma restituisce un risultato entro e non oltre l'orario indicato da Abs_time, indipendentemente dall'esito. Il valore restituito viene convertito in true se il metodo ottiene la proprietà; in caso contrario, il valore restituito viene convertito in false.

Un tipo mutex è noto anche come tipo bloccabile. Se non fornisce la funzione try_lockmembro , 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_mutexdi , 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_lockindicare 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.

Vedi anche

Riferimento file di intestazione