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à
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.