ReaderWriterLockSlim.EnterWriteLock Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Megkísérli beírni a zárolást írási módban.
public:
void EnterWriteLock();
public void EnterWriteLock();
member this.EnterWriteLock : unit -> unit
Public Sub EnterWriteLock ()
Kivételek
A RecursionPolicy tulajdonság az, NoRecursion és az aktuális szál már bármilyen módban belépett a zárolásba.
-vagy-
Az aktuális szál belépett olvasási módba, és még nem rendelkezik írási zárral, ezért ha írási módban próbál belépni a zárolásba, az holtpontot eredményezne.
-vagy-
A rekurziós szám meghaladná a számláló kapacitását. A korlát olyan nagy, hogy az alkalmazások soha nem találkozhatnak vele.
Az ReaderWriterLockSlim objektumot megsemmisítették.
Példák
Az alábbi példa bemutatja, hogyan használhatja a EnterWriteLock metódust a zárolás írási módban való megadására. A példában látható metódus új kulcs-érték párokat ad hozzá a szinkronizált gyorsítótárhoz. Ha a kulcs már szerepel a gyorsítótárban, a belső Dictionary<TKey,TValue> által okozott kivétel megszakíthatja a metódust. A finally metódus végrehajtásához ExitWriteLock blokkot használunk, amely biztosítja, hogy a hívó kilépjen az írási módból.
Ez a kód egy nagyobb, az ReaderWriterLockSlim osztályhoz tartozó példa része.
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 void Add(int key, string value)
{
cacheLock.EnterWriteLock();
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
}
Public Sub Add(ByVal key As Integer, ByVal value As String)
cacheLock.EnterWriteLock()
Try
innerCache.Add(key, value)
Finally
cacheLock.ExitWriteLock()
End Try
End Sub
Megjegyzések
Ez a metódus letiltja, amíg a hívó szál be nem lép a zárolásba, ezért előfordulhat, hogy soha nem tér vissza. TryEnterWriteLock A metódussal letilthat egy megadott időközt, majd visszatérhet, ha a hívószál nem adott meg írási módot az adott időköz alatt.
Ha más szálak olvasási módban léptek be a zárolásba, egy olyan szál, amely addig blokkolja a EnterWriteLock metódust, amíg ezek a szálak ki nem lépnek az olvasási módból. Ha vannak olyan szálak, amelyek írási módra várnak, a további szálak, amelyek olvasási módba vagy frissíthető módba próbálnak lépni, mindaddig, amíg az írási mód megadására váró összes szál időtúllépést vagy írási módot nem ad meg, majd kilépnek belőle.
Note
Ha a zárolás lehetővé teszi a rekurziót, a zárolást írási módban beírt szálak rekurzív módon is beírhatják, még akkor is, ha más szálak írási módra várnak.