Condividi tramite


<mutex>

Importare i mutex standard <di intestazione> per definire le classi mutex, recursive_mutex, timed_mutex e recursive_timed_mutex; i modelli lock_guard e unique_lock; e tipi e funzioni di supporto che definiscono aree di codice a esclusione reciproca.

Questa intestazione utilizza il runtime di concorrenza (ConcRT) per consentirne l'utilizzo con altri meccanismi di ConcRT. Per ulteriori informazioni su ConcRT, vedere Runtime di concorrenza.

#include <mutex>

Note

Nota

Nel codice compilato utilizzando /clr o /clr:pure, questa intestazione è bloccata.

Le classi mutex e recursive_mutex sono tipi di mutex. Un tipo di mutex dispone di un costruttore predefinito e un distruttore non genera eccezioni. Questi oggetti includono metodi che forniscono l'esclusione reciproca quando più thread tentano di bloccare lo stesso oggetto. In particolare, un tipo di mutex contiene metodi lock, try_lock e unlock:

  • Il metodo di lock blocca il thread chiamante finché il thread non ottenere la proprietà del mutex. Il valore restituito viene ignorato.

  • Il metodo di try_lock tenta di ottenere la proprietà del mutex senza blocco. Il tipo restituito è convertibile in bool ed è true se il metodo ottiene la proprietà, ma potrebbe altrimenti false.

  • Il metodo di unlock rilascia la proprietà del mutex dal thread chiamante.

È possibile utilizzare i tipi di mutex come argomenti di tipo per creare un'istanza dei modelli lock_guard e unique_lock. È possibile utilizzare gli oggetti di questi tipi come argomento di Lock alle funzioni membro di attesa nel modello condition_variable_any.

Un determinato tipo di mutex soddisfa i requisiti per un tipo di mutex. Inoltre, dispongono di metodi di try_lock_until e di try_lock_for che devono essere richiamabili tramite un argomento e restituire il tipo che è convertibile in bool. Un determinato tipo di mutex può definire queste funzioni utilizzando argomenti aggiuntivi, a condizione che gli argomenti aggiuntivi tutti dispongono di valori predefiniti.

  • Il metodo di try_lock_for deve possano essere chiamati utilizzando un argomento, Rel_time, il cui tipo è una creazione di istanze di chrono::duration. Il metodo tenta di ottenere la proprietà del mutex, ma restituisce i limiti di tempo definito da Rel_time, indipendentemente dalla riuscita. Il valore restituito viene convertita in true se il metodo ottiene la proprietà; in caso contrario, lo converte di valore restituito a false.

  • Il metodo di try_lock_until deve possano essere chiamati utilizzando un argomento, Abs_time, il cui tipo è una creazione di istanze di chrono::time_point. Il metodo tenta di ottenere non più avanti la proprietà del mutex, ma restituisce il tempo definito da Abs_time, indipendentemente dalla riuscita. Il valore restituito viene convertita in true se il metodo ottiene la proprietà; in caso contrario, lo converte di valore restituito a false.

Un tipo di mutex è anche nota come tipo bloccabile. Se non fornisce la funzione membro try_lock, è un tipo bloccabile di base. Un determinato tipo di mutex è anche nota come tipo bloccabile tempo.

Classi

Nome

Descrizione

Classe lock_guard

Rappresenta un modello che è possibile creare un'istanza per creare un oggetto di cui il distruttore sblocca mutex.

Classe mutex (Libreria dei modelli standard)

Rappresenta un tipo di mutex. Utilizzare gli oggetti di questo tipo per applicare l'esclusione reciproca con un programma.

Classe recursive_mutex

Rappresenta un tipo di mutex. In constrast alla classe di mutex, il comportamento dei metodi di chiamata di blocco per oggetti già sono bloccati è ben definito.

Classe recursive_timed_mutex

Rappresenta un determinato tipo del mutex. Utilizzare gli oggetti di questo tipo per applicare l'esclusione reciproca con blocco limitato nel tempo in un programma. A differenza degli oggetti di tipo timed_mutex, l'effetto di chiamare i metodi di blocco per gli oggetti di recursive_timed_mutex è ben definito.

Classe timed_mutex

Rappresenta un determinato tipo del mutex. Utilizzare gli oggetti di questo tipo per applicare l'esclusione reciproca con blocco limitato nel tempo in un programma.

Classe unique_lock

Rappresenta un modello che è possibile creare un'istanza per creare oggetti che gestiscono il blocco e sblocco di mutex.

Funzioni

Nome

Descrizione

Funzione call_once

Fornisce un meccanismo per chiamare un oggetto chiamabile specificato esattamente una volta durante l'esecuzione.

Funzione lock

Tenta di bloccare tutti gli argomenti senza deadlock.

Strutture

Nome

Descrizione

Struttura adopt_lock_t

Rappresenta un tipo utilizzato per definire adopt_lock.

Struttura defer_lock_t

Rappresenta un tipo che definisce un oggetto di defer_lock utilizzata per selezionare uno dei costruttori di overload di unique_lock.

Struttura once_flag

Rappresenta struct utilizzato con la funzione call_once del modello per garantire che il codice di inizializzazione venga chiamato una sola volta, anche in presenza di più thread di esecuzione.

Struttura try_to_lock_t

Rappresenta struct che definisce un oggetto di try_to_lock e viene utilizzato per selezionare uno dei costruttori di overload di unique_lock.

Variabili.

Nome

Descrizione

adopt_lock (variabile)

Rappresenta un oggetto che può essere passato a costruttori per lock_guard e unique_lock per indicare che i mutex oggetto che anche vengono passati al costruttore viene bloccato.

Variabile defer_lock

Rappresenta un oggetto che può essere passato al costruttore per unique_lock, per indicare che il costruttore non deve bloccare un oggetto mutex che sta passando.

Variabile try_to_lock

Rappresenta un oggetto che può essere passato al costruttore per unique_lock indicare che il costruttore deve tentare di sbloccare mutex che sta passando un valore senza blocco.

Vedere anche

Altre risorse

File di intestazione libreria standard C++