Condividi tramite


Esempio di tecnologia della sincronizzazione di attesa

Aggiornamento: novembre 2007

In questo esempio viene illustrato come utilizzare la classe WaitHandle per la sincronizzazione dei thread. Il tipo Mutex derivato da WaitHandle viene utilizzato per imporre l'accesso mutuamente esclusivo a un blocco di codice protetto.

Per ulteriori informazioni sull'utilizzo degli esempi, vedere i seguenti argomenti:

Download sample

Per compilare l'esempio utilizzando il prompt dei comandi

  1. Aprire la finestra del prompt dei comandi, quindi spostarsi in una delle sottodirectory specifiche del linguaggio relative all'esempio.

  2. Dalla riga di comando digitare msbuild WaitSynchronizationCS.sln o msbuild WaitSynchronizationVB.sln, a seconda del linguaggio di programmazione che si desidera utilizzare.

Per compilare l'esempio utilizzando Visual Studio

  1. Aprire Esplora risorse, quindi spostarsi in una delle sottodirectory specifiche del linguaggio relative all'esempio.

  2. Fare doppio clic sull'icona relativa a WaitSynchronizationCS.sln o WaitSynchronizationVB.sln, a seconda del linguaggio di programmazione che si desidera utilizzare, per aprire il file in Visual Studio.

  3. Scegliere Compila soluzione dal menu Compila.

Per eseguire l'esempio

  1. Spostarsi nella directory contenente il nuovo file eseguibile.

  2. Digitare Mutex.exe dalla riga di comando.

    Nota:

    L'esempio compila un'applicazione console. Per visualizzare l'output dell'applicazione, è necessario avviarla da una finestra della console.

Osservazioni

Questo esempio accoda cinque chiamate asincrone ai metodi. A questo punto, ciascun metodo attende di acquisire la proprietà della risorsa, scrive nella console, diventa inattivo e quindi scrive nuovamente nella console.

Nell'elenco riportato di seguito vengono descritte in modo sintetico le classi e le tecnologie utilizzate dall'esempio.

  • Sincronizzazione di thread

    • Mutex - Fornisce la mutua esclusione per la sincronizzazione dei thread.

    • AutoResetEvent - Il thread principale dell'esempio rimane in attesa su AutoResetEvent finché tale evento non viene impostato, ossia fino a quando l'ultima delle funzioni asincrone non ha completato le operazioni previste.

    • WaitHandle - La classe WaitHandle è la classe base da cui sono derivate entrambe le classi Mutex e AutoResetEvent. Questo tipo implementa i metodi in modo che rimangano in attesa finché lo stato dei diversi tipi derivati non viene impostato su "segnalato".

    • Interlocked - Nell'esempio viene utilizzato il metodo statico Decrement per accedere in modo asincrono a una variabile contatore allo scopo di indicare quando l'oggetto AutoResetEvent deve essere impostato.

  • Threading

    • ThreadPool - Durante la scrittura di codice gestito si consiglia agli sviluppatori di utilizzare, quando possibile, il metodo QueueUserWorkItem per implementare le chiamate asincrone ai metodi. Nell'esempio viene utilizzato questo approccio per l'esecuzione di codice che tenta di acquisire la proprietà di una risorsa logica.
  • Delegati

    • WaitCallback - Consente di creare un metodo di callback indipendente dai tipi per la classe ThreadPool da utilizzare.

Per ulteriori informazioni sul threading e sulla sincronizzazione, vedere i commenti nei file di codice sorgente e build.proj.

Vedere anche

Concetti

Thread e threading

Riferimenti

AutoResetEvent

Delegate

Interlocked

Mutex

System.Threading

ThreadPool

WaitCallback

WaitHandle

Altre risorse

Oggetti e funzionalità del threading