ReaderWriterLock.AcquireWriterLock Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
- Het Beheerd Draadbeheer
- ReaderWriterLock
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
- Het Beheerd Draadbeheer
- ReaderWriterLock