ReaderWriterLock.AcquireWriterLock Methode

Definitie

Hiermee verkrijgt u de schrijfvergrendeling.

Overloads

Name Description
AcquireWriterLock(Int32)

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

AcquireWriterLock(TimeSpan)

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

AcquireWriterLock(Int32)

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

public:
 void AcquireWriterLock(int millisecondsTimeout);
public void AcquireWriterLock(int millisecondsTimeout);
member this.AcquireWriterLock : int -> unit
Public Sub AcquireWriterLock (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 schrijfvergrendeling kunt verkrijgen en vrijgeven en hoe u de uitzondering kunt verwerken 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 the writer lock, and handle time-outs.
static void WriteToResource(Random rnd, 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);
   }
}
' Request and release the writer lock, and handle time-outs.
Sub WriteToResource(rnd As Random, timeOut As Integer)
   Try
      rwl.AcquireWriterLock(timeOut)
      Try
         ' It's safe for this thread to read or write from the shared resource.
         resource = rnd.Next(500)
         Display("writes resource value " & resource)
         Interlocked.Increment(writes)
      Finally
         ' Ensure that the lock is released.
         rwl.ReleaseWriterLock()
      End Try
   Catch ex As ApplicationException
      ' The writer lock request timed out.
      Interlocked.Increment(writerTimeouts)
   End Try
End Sub
}
End Module

Opmerkingen

Deze methode blokkeert als een andere thread een lezervergrendeling of schrijfvergrendeling heeft. Zie de ReaderWriterLock klasse voor een beschrijving van de manier waarop de schrijververgrendeling wisselt met meerdere gelijktijdige lezervergrendelingen.

Een thread die al een lezervergrendeling heeft, kan de schrijfvergrendeling op twee manieren verkrijgen: door de lezervergrendeling los te laten voordat u aanroept AcquireWriterLockof door aan te roepen UpgradeToWriterLock.

Caution

Als een thread wordt aanroepen AcquireWriterLock terwijl deze nog steeds een lezervergrendeling heeft, wordt deze geblokkeerd op een eigen lezervergrendeling. Als er een oneindige time-out is opgegeven, loopt de thread vast. Als u dergelijke impasses wilt voorkomen, gebruikt IsReaderLockHeld u om te bepalen of de huidige thread al een lezervergrendeling heeft.

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

Recursieve vergrendelingsaanvragen worden altijd onmiddellijk verleend, zonder de aanvraagthread in de schrijfwachtrij te plaatsen.

Zie voor geldige time-outwaarden ReaderWriterLock.

Zie ook

Van toepassing op

AcquireWriterLock(TimeSpan)

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

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

Parameters

timeout
TimeSpan

De TimeSpan time-outperiode opgeven.

Uitzonderingen

timeout verloopt voordat de vergrendelingsaanvraag wordt verleend.

timeout geeft een andere negatieve waarde dan -1 milliseconden.

Opmerkingen

Deze methode blokkeert als een andere thread een lezervergrendeling of schrijfvergrendeling heeft. Zie de ReaderWriterLock klasse voor een beschrijving van de manier waarop de schrijververgrendeling wisselt met meerdere gelijktijdige lezervergrendelingen.

Een thread die al een lezervergrendeling heeft, kan de schrijfvergrendeling op twee manieren verkrijgen: door de lezervergrendeling los te laten voordat u aanroept AcquireWriterLockof door aan te roepen UpgradeToWriterLock.

Caution

Als een thread wordt aanroepen AcquireWriterLock terwijl deze nog steeds een lezervergrendeling heeft, wordt deze geblokkeerd op een eigen lezervergrendeling. Als er een oneindige time-out is opgegeven, loopt de thread vast. Als u dergelijke impasses wilt voorkomen, gebruikt IsReaderLockHeld u om te bepalen of de huidige thread al een lezervergrendeling heeft.

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

Recursieve vergrendelingsaanvragen worden altijd onmiddellijk verleend, zonder de aanvraagthread in de schrijfwachtrij te plaatsen.

Zie voor geldige time-outwaarden ReaderWriterLock.

Zie ook

Van toepassing op