Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo ReaderWriterLock.AcquireWriterLock (Int32)

 

Data di pubblicazione: ottobre 2016

Acquisisce un blocco del writer, usando un valore Int32 per il timeout.

Spazio dei nomi:   System.Threading
Assembly:  mscorlib (in mscorlib.dll)

public void AcquireWriterLock(
	int millisecondsTimeout
)

Parametri

millisecondsTimeout
Type: System.Int32

Timeout in millisecondi.

Exception Condition
ApplicationException

timeout scade prima che la richiesta di blocco viene concesso.

Questo metodo si blocca se un altro thread dispone di un blocco di lettura o scrittura. Per una descrizione del modo in cui il blocco del writer si alterna con più blocchi di lettura simultanei, vedere la ReaderWriterLock classe.

Un thread che dispone già di un blocco del lettore può acquisire il blocco del writer in uno dei due modi: rilasciando il blocco del lettore prima di chiamare AcquireWriterLock, oppure chiamando UpgradeToWriterLock.

System_CAPS_cautionAttenzione

Se un thread chiama AcquireWriterLock mentre è ancora un blocco del lettore, bloccherà il proprio blocco del lettore; se viene specificato un timeout infinito, il thread di un deadlock. Per evitare questi deadlock, utilizzare IsReaderLockHeld per determinare se il thread corrente ha già un blocco del lettore.

AcquireWriterLock supporta le richieste di blocco del writer ricorsiva. Ovvero, un thread può chiamare AcquireWriterLock più volte, il quale viene incrementato il conteggio dei blocchi ogni volta. È necessario chiamare ReleaseWriterLock una volta per ogni volta che si chiama AcquireWriterLock. In alternativa, è possibile chiamare ReleaseLock per ridurre il conteggio dei blocchi per azzerare immediatamente.

Richieste ricorsive di blocco vengono sempre soddisfatte immediatamente, senza inserire il thread di richiesta nella coda del writer.

Per valori di timeout validi, vedere ReaderWriterLock.

Esempio di codice seguente viene illustrato come acquisire e rilasciare un blocco del writer e come gestire l'eccezione generata quando scade una richiesta.

Questo codice è parte di un esempio più esaustivo fornito per la ReaderWriterLock classe.

// The complete code is located in the ReaderWriterLock class topic.
using System;
using System.Threading;

public class Example
{
   static ReaderWriterLock rwl = new ReaderWriterLock();
   // Define the shared resource protected by the ReaderWriterLock.
   static int resource = 0;
// Request and release the writer lock, and handle time-outs.
static void WriteToResource(int timeOut)
{
   try {
      rwl.AcquireWriterLock(timeOut);
      try {
         // It's safe for this thread to access from the shared resource.
         resource = rnd.Next(500);
         Display("writes resource value " + resource);
         Interlocked.Increment(ref writes);
      }
      finally {
         // Ensure that the lock is released.
         rwl.ReleaseWriterLock();
      }
   }
   catch (ApplicationException) {
      // The writer lock request timed out.
      Interlocked.Increment(ref writerTimeouts);
   }
}

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: