Condividi tramite


Classe CMutex

Rappresenta un "mutex", ovvero un oggetto di sincronizzazione che consente a un thread l'accesso che si escludono a vicenda a una risorsa.

Sintassi

class CMutex : public CSyncObject

Membri

Costruttori pubblici

Nome Descrizione
CMutex::CMutex Costruisce un oggetto CMutex.

Osservazioni:

I mutex sono utili quando è possibile modificare dati o altre risorse controllate solo un thread alla volta. Ad esempio, l'aggiunta di nodi a un elenco collegato è un processo che deve essere consentito solo da un thread alla volta. Usando un CMutex oggetto per controllare l'elenco collegato, un solo thread alla volta può ottenere l'accesso all'elenco.

Per utilizzare un CMutex oggetto , costruire l'oggetto CMutex quando necessario. Specificare il nome del mutex che si vuole attendere e che l'applicazione deve essere proprietaria inizialmente. È quindi possibile accedere al mutex quando viene restituito il costruttore. Chiamare CSyncObject::Unlock al termine dell'accesso alla risorsa controllata.

Un metodo alternativo per l'uso CMutex degli oggetti consiste nell'aggiungere una variabile di tipo CMutex come membro dati alla classe che si desidera controllare. Durante la costruzione dell'oggetto controllato, chiamare il costruttore del membro dati specificando se il mutex è inizialmente di proprietà, il nome del mutex (se verrà usato attraverso i limiti del CMutex processo) e gli attributi di sicurezza desiderati.

Per accedere alle risorse controllate dagli CMutex oggetti in questo modo, creare prima di tutto una variabile di tipo CSingleLock o di tipo CMultiLock nella funzione membro di accesso della risorsa. Chiamare quindi la funzione membro dell'oggetto Lock lock, ad esempio CSingleLock::Lock. A questo punto, il thread otterrà l'accesso alla risorsa, attenderà il rilascio della risorsa e otterrà l'accesso o attenderà il rilascio e il timeout della risorsa, senza ottenere l'accesso alla risorsa. In ogni caso, la risorsa è stata accessibile in modo thread-safe. Per rilasciare la risorsa, usare la funzione membro dell'oggetto Unlock lock (ad esempio, CSingleLock::Unlock) o consentire all'oggetto lock di uscire dall'ambito.

Per altre informazioni sull'uso CMutex di oggetti, vedere l'articolo Multithreading: Come usare le classi di sincronizzazione.

Gerarchia di ereditarietà

CObject

CSyncObject

CMutex

Requisiti

Intestazione: afxmt.h

CMutex::CMutex

Costruisce un oggetto denominato o senza CMutex nome.

CMutex(
    BOOL bInitiallyOwn = FALSE,
    LPCTSTR lpszName = NULL,
    LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);

Parametri

bInitiallyOwn
Specifica se il thread che crea l'oggetto CMutex ha inizialmente accesso alla risorsa controllata dal mutex.

lpszName
Nome dell'oggetto CMutex. Se esiste un altro mutex con lo stesso nome, è necessario specificare lpszName se l'oggetto verrà usato attraverso i limiti del processo. Se NULL, il mutex verrà senza nome. Se il nome corrisponde a un mutex esistente, il costruttore compila un nuovo CMutex oggetto che fa riferimento al mutex di tale nome. Se il nome corrisponde a un oggetto di sincronizzazione esistente che non è un mutex, la costruzione avrà esito negativo.

lpsaAttribute
Attributi di sicurezza per l'oggetto mutex. Per una descrizione completa di questa struttura, vedere SECURITY_ATTRIBUTES in Windows SDK.

Osservazioni:

Per accedere o rilasciare un CMutex oggetto, creare un oggetto CMultiLock o CSingleLock e chiamarne le funzioni membro Lock e Unlock . Se l'oggetto CMutex viene usato in modalità autonoma, chiamare la funzione Unlock membro per rilasciarla.

Importante

Dopo aver creato l'oggetto CMutex , usare GetLastError per assicurarsi che il mutex non esista già. Se il mutex esiste in modo imprevisto, potrebbe indicare che un processo non autorizzato è squatting e potrebbe voler usare il mutex in modo dannoso. In questo caso, la procedura consigliata per la sicurezza consiste nel chiudere l'handle e continuare come se si verificasse un errore nella creazione dell'oggetto.

Vedi anche

Classe CSyncObject
Grafico della gerarchia