ReaderWriterLockSlim.TryEnterWriteLock Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Pokusí se zadat zámek v režimu zápisu s volitelným časovým limitem.
Přetížení
TryEnterWriteLock(Int32) |
Pokusí se zadat zámek v režimu zápisu s volitelným časovým limitem. |
TryEnterWriteLock(TimeSpan) |
Pokusí se zadat zámek v režimu zápisu s volitelným časovým limitem. |
TryEnterWriteLock(Int32)
- Zdroj:
- ReaderWriterLockSlim.cs
- Zdroj:
- ReaderWriterLockSlim.cs
- Zdroj:
- ReaderWriterLockSlim.cs
Pokusí se zadat zámek v režimu zápisu s volitelným časovým limitem.
public:
bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock (int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean
Parametry
- millisecondsTimeout
- Int32
Počet milisekund, které se mají čekat, nebo -1 (Infinite) čekat na neomezenou dobu.
Návraty
true
pokud volající vlákno přešlo do režimu zápisu, v opačném případě . false
Výjimky
Vlastnost RecursionPolicy je NoRecursion a aktuální vlákno již vstoupilo do zámku.
-nebo-
Aktuální vlákno původně vstoupilo do zámku v režimu čtení, a proto pokus o vstup do režimu zápisu by vytvořil možnost vzájemného zablokování.
-nebo-
Číslo rekurze by překročilo kapacitu čítače. Limit je tak velký, že by ho aplikace nikdy neměly narazit.
Hodnota millisecondsTimeout
je záporná, ale nerovná se Infinite (-1), což je jediná povolená záporná hodnota.
Objekt ReaderWriterLockSlim byl odstraněn.
Příklady
Následující příklad ukazuje, jak pomocí TryEnterWriteLock metody zadat zámek v režimu zápisu s vypršením časového limitu. Metoda uvedená v příkladu přidá do synchronizované mezipaměti nový pár klíč/hodnota. Pokud zadaný interval časového limitu uplyne před vstupem vlákna do zámku, vrátí false
metoda . Metoda vrátí true
, pokud je přidán pár klíč/hodnota.
Pokud je klíč již v mezipaměti, výjimka vyvolaná vnitřní Dictionary<TKey,TValue> je povoleno ukončit metodu. K finally
provedení ExitWriteLock metody se používá blok, který zajišťuje, že volající opustí zámek.
Tento kód je součástí většího příkladu ReaderWriterLockSlim , který je k dispozici pro třídu.
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public bool AddWithTimeout(int key, string value, int timeout)
{
if (cacheLock.TryEnterWriteLock(timeout))
{
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
return true;
}
else
{
return false;
}
}
Public Function AddWithTimeout(ByVal key As Integer, ByVal value As String, _
ByVal timeout As Integer) As Boolean
If cacheLock.TryEnterWriteLock(timeout) Then
Try
innerCache.Add(key, value)
Finally
cacheLock.ExitWriteLock()
End Try
Return True
Else
Return False
End If
End Function
Poznámky
Pokud millisecondsTimeout
je hodnota 0 (nula), tato metoda zkontroluje stav uzamčení a vrátí false
okamžitě, pokud požadovaný stav není k dispozici.
Pokud jiná vlákna přešla do zámku v režimu čtení, vlákno, které volá metodu TryEnterWriteLock , blokuje, dokud tato vlákna ukončí režim čtení nebo dokud nevyplyne interval časového limitu. Zatímco vlákna jsou blokována a čekají na přechod do režimu zápisu, další vlákna, která se snaží přejít do režimu čtení nebo upgradovatelného režimu blokují, dokud všechna vlákna čekající na přechod do režimu zápisu buď nevypadnou, nebo nepřejdou do režimu zápisu a pak se z něj ukončí.
Poznámka
Pokud zámek umožňuje rekurze, vlákno, které zadalo zámek v režimu zápisu, může přejít do režimu zápisu rekurzivně, i když jiná vlákna čekají na vstup do režimu zápisu.
Platí pro
TryEnterWriteLock(TimeSpan)
- Zdroj:
- ReaderWriterLockSlim.cs
- Zdroj:
- ReaderWriterLockSlim.cs
- Zdroj:
- ReaderWriterLockSlim.cs
Pokusí se zadat zámek v režimu zápisu s volitelným časovým limitem.
public:
bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock (TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean
Parametry
- timeout
- TimeSpan
Interval čekání nebo -1 milisekundy čekání na neomezenou dobu.
Návraty
true
pokud volající vlákno přešlo do režimu zápisu, v opačném případě . false
Výjimky
Vlastnost RecursionPolicy je NoRecursion a aktuální vlákno již vstoupilo do zámku.
-nebo-
Aktuální vlákno původně vstoupilo do zámku v režimu čtení, a proto pokus o vstup do režimu zápisu by vytvořil možnost vzájemného zablokování.
-nebo-
Číslo rekurze by překročilo kapacitu čítače. Limit je tak velký, že by ho aplikace nikdy neměly narazit.
Hodnota timeout
je záporná, ale nerovná se -1 milisekund, což je jediná záporná hodnota povolená.
-nebo-
Hodnota je timeout
větší než Int32.MaxValue v milisekundách.
Objekt ReaderWriterLockSlim byl odstraněn.
Poznámky
Pokud timeout
je hodnota 0 (nula), tato metoda zkontroluje stav uzamčení a vrátí false
okamžitě, pokud požadovaný stav není k dispozici.
Pokud jiná vlákna přešla do zámku v režimu čtení, vlákno, které volá metodu TryEnterWriteLock , blokuje, dokud tato vlákna ukončí režim čtení nebo dokud nevyplyne interval časového limitu. Zatímco vlákna jsou blokována a čekají na přechod do režimu zápisu, další vlákna, která se snaží přejít do režimu čtení nebo upgradovatelného režimu blokují, dokud všechna vlákna čekající na přechod do režimu zápisu buď nevypadnou, nebo nepřejdou do režimu zápisu a pak se z něj ukončí.
Poznámka
Pokud zámek umožňuje rekurze, vlákno, které zadalo zámek v režimu zápisu, může přejít do režimu zápisu rekurzivně, i když jiná vlákna čekají na vstup do režimu zápisu.