ReaderWriterLock.AcquireReaderLock Methode

Definitie

Hiermee verkrijgt u een lezervergrendeling.

Overloads

Name Description
AcquireReaderLock(Int32)

Hiermee verkrijgt u een lezervergrendeling met behulp van een Int32 waarde voor de time-out.

AcquireReaderLock(TimeSpan)

Hiermee verkrijgt u een lezervergrendeling met behulp van een TimeSpan waarde voor de time-out.

AcquireReaderLock(Int32)

Hiermee verkrijgt u een lezervergrendeling met behulp van een Int32 waarde voor de time-out.

public:
 void AcquireReaderLock(int millisecondsTimeout);
public void AcquireReaderLock(int millisecondsTimeout);
member this.AcquireReaderLock : int -> unit
Public Sub AcquireReaderLock (millisecondsTimeout As Integer)

Parameters

millisecondsTimeout
Int32

De time-out in milliseconden.

Uitzonderingen

millisecondsTimeout verloopt voordat de vergrendelingsaanvraag wordt verleend.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u een lezervergrendeling verkrijgt en loslaat en hoe u de uitzondering verwerkt die wordt gegenereerd wanneer er een time-out optreedt voor een aanvraag.

Deze code maakt deel uit van een groter voorbeeld voor de ReaderWriterLock klasse.

// 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;
' The complete code is located in the ReaderWriterLock class topic.
Imports System.Threading

Public Module Example
   Private rwl As New ReaderWriterLock()
   ' Define the shared resource protected by the ReaderWriterLock.
   Private resource As Integer = 0
// Request and release a reader lock, and handle time-outs.
static void ReadFromResource(int timeOut)
{
   try {
      rwl.AcquireReaderLock(timeOut);
      try {
         // It is safe for this thread to read from the shared resource.
         Display("reads resource value " + resource);
         Interlocked.Increment(ref reads);
      }
      finally {
         // Ensure that the lock is released.
         rwl.ReleaseReaderLock();
      }
   }
   catch (ApplicationException) {
      // The reader lock request timed out.
      Interlocked.Increment(ref readerTimeouts);
   }
}
' Request and release a reader lock, and handle time-outs.
Sub ReadFromResource(timeOut As Integer)
   Try
      rwl.AcquireReaderLock(timeOut)
      Try
         ' It's safe for this thread to read from the shared resource.
         Display("reads resource value " & resource)
         Interlocked.Increment(reads)
      Finally
         ' Ensure that the lock is released.
         rwl.ReleaseReaderLock()
      End Try
   Catch ex As ApplicationException
      ' The reader lock request timed out.
      Interlocked.Increment(readerTimeouts)
   End Try
End Sub
}
End Module

Opmerkingen

AcquireReaderLock wordt geblokkeerd als een andere thread de schrijfvergrendeling heeft of als ten minste één thread wacht op de schrijfvergrendeling.

Note

Als de huidige thread al de schrijfvergrendeling heeft, wordt er geen lezervergrendeling verkregen. In plaats daarvan wordt het aantal vergrendelingen op de schrijfvergrendeling verhoogd. Hiermee voorkomt u dat een thread een eigen schrijfvergrendeling blokkeert. Het resultaat is precies hetzelfde als het aanroepen AcquireWriterLocken er is een extra aanroep ReleaseWriterLock vereist bij het vrijgeven van de schrijfvergrendeling.

AcquireReaderLock ondersteunt recursieve aanvragen voor lezervergrendeling. Dat wil gezegd, een thread kan AcquireReaderLock meerdere keren aanroepen, waardoor het aantal vergrendelingen telkens wordt verhoogd. U moet één keer bellen ReleaseReaderLock voor elke keer dat u belt AcquireReaderLock. U kunt ook aanroepen ReleaseLock om het aantal vergrendelingen onmiddellijk te verminderen tot nul.

Recursieve vergrendelingsaanvragen worden altijd onmiddellijk verleend, zonder dat de aanvraagthread in de lezerwachtrij wordt geplaatst. Gebruik recursieve vergrendelingen met voorzichtigheid om te voorkomen dat aanvragen voor schrijf-vergrendeling gedurende lange perioden worden geblokkeerd.

Zie voor geldige time-outwaarden ReaderWriterLock.

Zie ook

Van toepassing op

AcquireReaderLock(TimeSpan)

Hiermee verkrijgt u een lezervergrendeling met behulp van een TimeSpan waarde voor de time-out.

public:
 void AcquireReaderLock(TimeSpan timeout);
public void AcquireReaderLock(TimeSpan timeout);
member this.AcquireReaderLock : TimeSpan -> unit
Public Sub AcquireReaderLock (timeout As TimeSpan)

Parameters

timeout
TimeSpan

Een TimeSpan opgegeven time-outperiode.

Uitzonderingen

timeout verloopt voordat de vergrendelingsaanvraag wordt verleend.

timeout geeft een andere negatieve waarde dan -1 milliseconden.

Opmerkingen

AcquireReaderLock wordt geblokkeerd als een andere thread de schrijfvergrendeling heeft of als ten minste één thread wacht op de schrijfvergrendeling.

Note

Als de huidige thread al de schrijfvergrendeling heeft, wordt er geen lezervergrendeling verkregen. In plaats daarvan wordt het aantal vergrendelingen op de schrijfvergrendeling verhoogd. Hiermee voorkomt u dat een thread een eigen schrijfvergrendeling blokkeert. Het resultaat is precies hetzelfde als het aanroepen AcquireWriterLocken er is een extra aanroep ReleaseWriterLock vereist bij het vrijgeven van de schrijfvergrendeling.

AcquireReaderLock ondersteunt recursieve aanvragen voor lezervergrendeling. Dat wil gezegd, een thread kan AcquireReaderLock meerdere keren aanroepen, waardoor het aantal vergrendelingen telkens wordt verhoogd. U moet één keer bellen ReleaseReaderLock voor elke keer dat u belt AcquireReaderLock. U kunt ook aanroepen ReleaseLock om het aantal vergrendelingen onmiddellijk te verminderen tot nul.

Recursieve vergrendelingsaanvragen worden altijd onmiddellijk verleend, zonder dat de aanvraagthread in de lezerwachtrij wordt geplaatst. Gebruik recursieve vergrendelingen met voorzichtigheid om te voorkomen dat aanvragen voor schrijf-vergrendeling gedurende lange perioden worden geblokkeerd.

Zie voor geldige time-outwaarden ReaderWriterLock.

Zie ook

Van toepassing op