Sdílet prostřednictvím


ReaderWriterLockSlim.TryEnterUpgradeableReadLock Metoda

Definice

Pokusí se přejít na zámek v upgradovatelném režimu s volitelným vypršením časového limitu.

Přetížení

TryEnterUpgradeableReadLock(Int32)

Pokusí se přejít na zámek v upgradovatelném režimu s volitelným vypršením časového limitu.

TryEnterUpgradeableReadLock(TimeSpan)

Pokusí se přejít na zámek v upgradovatelném režimu s volitelným vypršením časového limitu.

TryEnterUpgradeableReadLock(Int32)

Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs

Pokusí se přejít na zámek v upgradovatelném režimu s volitelným vypršením časového limitu.

public:
 bool TryEnterUpgradeableReadLock(int millisecondsTimeout);
public bool TryEnterUpgradeableReadLock (int millisecondsTimeout);
member this.TryEnterUpgradeableReadLock : int -> bool
Public Function TryEnterUpgradeableReadLock (millisecondsTimeout As Integer) As Boolean

Parametry

millisecondsTimeout
Int32

Počet milisekund, které se mají čekat, nebo -1 (Infinite) čekat na neomezenou dobu.

Návraty

truepokud volající vlákno přešlo do upgradovatelného režimu, 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 přechod do upgradovatelného režimu 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.

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.

Upgradovatelný režim použijte, pokud vlákno obvykle přistupuje k prostředku, který je chráněný ReaderWriterLockSlim v režimu čtení, ale může být nutné přejít do režimu zápisu, pokud jsou splněny určité podmínky. Vlákno v upgradovatelném režimu může upgradovat do režimu zápisu nebo downgradovat do režimu čtení.

V daném okamžiku může v upgradovatelném režimu vstoupit do zámku pouze jedno vlákno. Pokud je vlákno v upgradovatelném režimu a na přechod do režimu zápisu nečekají žádná vlákna, může do režimu čtení přejít libovolný počet dalších vláken, a to i v případě, že jsou vlákna čekající na přechod do upgradovatelného režimu.

Pokud jedno nebo více vláken čeká na vstup do režimu zápisu, vlákno, které volá metodu TryEnterUpgradeableReadLock blokuje, dokud tato vlákna buď nevyprší časový limit nebo nepřejdou do režimu zápisu a pak se z něj ukončí, nebo dokud nevyprší časový limit vlastního časového limitu volajícího vlákna.

Poznámka

Pokud zámek umožňuje rekurzi, vlákno, které zadalo zámek v upgradovatelném režimu, může přejít do upgradovatelného režimu rekurzivně, i když jiná vlákna čekají na přechod do režimu zápisu.

Platí pro

TryEnterUpgradeableReadLock(TimeSpan)

Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs

Pokusí se přejít na zámek v upgradovatelném režimu s volitelným vypršením časového limitu.

public:
 bool TryEnterUpgradeableReadLock(TimeSpan timeout);
public bool TryEnterUpgradeableReadLock (TimeSpan timeout);
member this.TryEnterUpgradeableReadLock : TimeSpan -> bool
Public Function TryEnterUpgradeableReadLock (timeout As TimeSpan) As Boolean

Parametry

timeout
TimeSpan

Interval čekání nebo -1 milisekundy čekání na neomezenou dobu.

Návraty

truepokud volající vlákno přešlo do upgradovatelného režimu, 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 přechod do upgradovatelného režimu 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.

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.

Upgradovatelný režim použijte, pokud vlákno obvykle přistupuje k prostředku chráněnému ReaderWriterLockSlim nástrojem v režimu čtení, ale může být nutné přejít do režimu zápisu, pokud jsou splněny určité podmínky. Vlákno v upgradovatelném režimu může upgradovat do režimu zápisu nebo downgradovat do režimu čtení.

V daném okamžiku může v upgradovatelném režimu vstoupit do zámku pouze jedno vlákno. Pokud je vlákno v upgradovatelném režimu a na přechod do režimu zápisu nečekají žádná vlákna, může do režimu čtení přejít libovolný počet dalších vláken, a to i v případě, že jsou vlákna čekající na přechod do upgradovatelného režimu.

Pokud jedno nebo více vláken čeká na vstup do režimu zápisu, vlákno, které volá metodu TryEnterUpgradeableReadLock blokuje, dokud tato vlákna buď nevyprší časový limit nebo nepřejdou do režimu zápisu a pak se z něj ukončí, nebo dokud nevyprší časový limit vlastního časového limitu volajícího vlákna.

Poznámka

Pokud zámek umožňuje rekurzi, vlákno, které zadalo zámek v upgradovatelném režimu, může přejít do upgradovatelného režimu rekurzivně, i když jiná vlákna čekají na přechod do režimu zápisu.

Platí pro