Oggetti di sincronizzazione
Un oggetto di sincronizzazione è un oggetto il cui handle può essere specificato in una delle funzioni di attesa per coordinare l'esecuzione di più thread. Più processi possono avere un handle per lo stesso oggetto di sincronizzazione, rendendo possibile la sincronizzazione tra processi.
I tipi di oggetto seguenti vengono forniti esclusivamente per la sincronizzazione.
Tipo | Descrizione |
---|---|
Evento | Notifica a uno o più thread in attesa che si è verificato un evento. Per altre informazioni, vedere Oggetti evento. |
Mutex | Può essere di proprietà di un solo thread alla volta, consentendo ai thread di coordinare l'accesso reciproco esclusivo a una risorsa condivisa. Per altre informazioni, vedere Oggetti Mutex. |
Semaphore | Gestisce un conteggio compreso tra zero e un valore massimo, limitando il numero di thread che accedono simultaneamente a una risorsa condivisa. Per altre informazioni, vedere Oggetti semafori. |
Timer waitable | Notifica a uno o più thread in attesa che sia arrivato un orario specificato. Per altre informazioni, vedere Oggetti timer waitable. |
Sebbene sia disponibile per altri usi, è anche possibile usare gli oggetti seguenti per la sincronizzazione.
Oggetto | Descrizione |
---|---|
Notifica di modifica | Creato dalla funzione FindFirstChangeNotification , il relativo stato viene impostato su segnalato quando si verifica un tipo specificato di modifica all'interno di una directory o di un albero di directory specificato. Per altre informazioni, vedere Recupero delle notifiche di modifica della directory. |
Input della console | Creato quando viene creata una console. L'handle per l'input della console viene restituito dalla funzione CreateFile quando si specifica CONIN$ o dalla funzione GetStdHandle . Lo stato è impostato su segnalato quando è presente un input non letto nel buffer di input della console e impostato su non assegnato quando il buffer di input è vuoto. Per altre informazioni sulle console, vedere Applicazioni in modalità carattere |
Processo | Creato chiamando la funzione CreateJobObject . Lo stato di un oggetto processo viene impostato su segnalato quando tutti i processi vengono terminati perché è stato superato il limite di tempo di fine processo specificato. Per altre informazioni sugli oggetti processo, vedere Oggetti processo. |
Notifica delle risorse di memoria | Creato dalla funzione CreateMemoryResourceNotification . Lo stato è impostato su segnalato quando si verifica un tipo di modifica specificato all'interno della memoria fisica. Per altre informazioni sulla memoria, vedere Gestione della memoria. |
Processo | Creato chiamando la funzione CreateProcess . Lo stato è impostato su non firmato mentre il processo è in esecuzione e impostato su segnalato quando termina il processo. Per altre informazioni sui processi, vedere Processi e thread. |
Thread | Creato quando viene creato un nuovo thread chiamando la funzione CreateProcess, CreateThread o CreateRemoteThread . Lo stato è impostato su non assegnato mentre il thread è in esecuzione e impostato su segnalato quando termina il thread. Per altre informazioni sui thread, vedere Processi e thread. |
In alcuni casi, è anche possibile usare un file, una named pipe o un dispositivo di comunicazione come oggetto di sincronizzazione; tuttavia, il loro uso a questo scopo è sconsigliato. Usare invece le operazioni di I/O asincrone e attendere il set di oggetti evento nella struttura OVERLAPPED . È più sicuro usare l'oggetto evento a causa della confusione che può verificarsi quando vengono eseguite più operazioni sovrapposte simultanee sullo stesso file, sulla named pipe o sul dispositivo di comunicazione. In questo caso, non è possibile sapere quale operazione ha causato la segnalazione dello stato dell'oggetto.
Per altre informazioni sulle operazioni di I/O su file, named pipe o comunicazioni, vedere Sincronizzazione e input e output sovrapposti.