ReaderWriterLock.AcquireReaderLock 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 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
- Het Beheerd Draadbeheer
- ReaderWriterLock
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
- Het Beheerd Draadbeheer
- ReaderWriterLock