Condividi tramite


Esempio di tecnologia della sincronizzazione monitor

Aggiornamento: novembre 2007

In questo esempio viene illustrato l'utilizzo della classe Monitor per la sincronizzazione dei thread. Le funzioni statiche di tipo Monitor vengono utilizzate per imporre l'accesso mutuamente esclusivo a un blocco di codice protetto.

Per ulteriori informazioni sulla sincronizzazione dei thread e sulla classe Monitor, vedere i commenti nei file di codice sorgente e build.proj.

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

Download sample

Per compilare l'esempio utilizzando il prompt dei comandi

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

  2. Dalla riga di comando digitare msbuild MonitorSynchronizationCS.sln o msbuild MonitorSynchronizationVB.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 MonitorSynchronizationCS.sln o MonitorSynchronizationVB.sln, a seconda del linguaggio di programmazione che si desidera utilizzare, per aprire il file in Visual Studio.

  3. Scegliere Build Solution dal menu Build.

Per eseguire l’esempio

  1. Spostarsi nella directory che contiene il nuovo eseguibile, utilizzando il prompt dei comandi.

  2. Digitare Monitor.exe dalla riga di comando.

Nota:

L'esempio compila un'applicazione console. Per visualizzare l'output dell'applicazione, è necessario avviarla dalla finestra del prompt dei comandi. Durante l'esecuzione dell'esempio è possibile notare che, per ciascun writer, l'output dell'opzione "Start Writing" viene visualizzato subito dopo l'output dell'opzione "Stop Writing" senza sovrapposizione dei thread con ID diversi. Questa situazione si verifica poiché i thread mantengono l'accesso esclusivo alla risorsa.

Osservazioni

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

  • Sincronizzazione di thread

    • Monitor - Fornisce funzioni statiche per l'accesso e l'uscita da un blocco di codice protetto. Non è possibile creare un'istanza del tipo Monitor, ma è possibile passare ai relativi metodi statici un riferimento a qualsiasi tipo derivato da un oggetto da utilizzare come unico nodo di sincronizzazione.

      Nota:

      In entrambi i linguaggi Visual Basic e C# sono implementate parole chiave speciali per sfruttare le funzionalità dei metodi statici del tipo Monitor. In C# viene utilizzata la parola chiave lock, mentre in Visual Basic viene utilizzata la parola chiave SyncLock.

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

    • 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, se 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.

Vedere anche

Concetti

Pool di thread gestiti

Riferimenti

Classe AutoResetEvent

Classe Delegate

Classe Interlocked

Classe Monitor

Spazio dei nomi System.Threading

Classe Thread

Classe ThreadPool

Delegato ThreadStart

Delegato WaitCallback

Altre risorse

Threading gestito

Oggetti e funzionalità del threading