Condividi tramite


Esempio di tecnologia della sincronizzazione Reader-Writer

Aggiornamento: novembre 2007

In questo esempio viene illustrato come utilizzare la classe ReaderWriterLock per la sincronizzazione dei thread. La funzionalità della classe ReaderWriterLock consente allo sviluppatore di scrivere codice che impone l'accesso esclusivo a una risorsa condivisa mentre un thread sta eseguendo un'operazione di scrittura o di modifica sulla risorsa, consentendo tuttavia l'accesso non esclusivo durante l'esecuzione di query o di operazioni di lettura sulla risorsa.

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 ReaderWriterSynchronizationCS.sln o msbuild ReaderWriterSynchronizationVB.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 ReaderWriterSynchronizationCS.sln o ReaderWriterSynchronizationVB.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 ReaderWriter.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 Fine scrittura viene visualizzato subito dopo l'output dell'opzione Inizio scrittura. Questo si verifica perché i writer, a differenza dei reader, mantengono l'accesso esclusivo alla risorsa.

Osservazioni

Per ulteriori informazioni sulla sincronizzazione dei thread e sull'accesso esclusivo, vedere i commenti nei file di codice sorgente e build.proj.

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

  • Sincronizzazione di thread

ReaderWriterLock- Consente di proteggere una risorsa logica implementata come una chiamata a Sleep. I thread che utilizzano il tipo ReaderWriterLock possono mantenere il blocco in due modi diversi. Ad esempio, un thread può mantenere un blocco di lettura. Si tratta di un blocco non esclusivo, che consente ad altri thread di acquisire un blocco di lettura per la classe. In alternativa, un thread può richiedere un blocco di scrittura. Si tratta di un blocco esclusivo, che non viene concesso finché non vengono rilasciati i blocchi di lettura e scrittura attualmente mantenuti.

  • 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

Thread e threading

Riferimenti

AutoResetEvent

Delegate

Interlocked

Mutex

System.Threading

ThreadPool

WaitCallback

WaitHandle

Altre risorse

Oggetti e funzionalità del threading