ReaderWriterLockSlim.EnterWriteLock 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
嘗試以寫入模式進入鎖。
public:
void EnterWriteLock();
public void EnterWriteLock();
member this.EnterWriteLock : unit -> unit
Public Sub EnterWriteLock ()
例外狀況
屬性為 RecursionPolicy , NoRecursion 且目前執行緒已在任何模式下進入鎖。
-或-
目前執行緒已進入讀取模式,且尚未擁有寫入鎖,因此嘗試以寫入模式進入鎖會造成死結的可能性。
-或-
遞迴數會超過計數器的容量。 這個限制如此龐大,應用程式根本不應該遇到。
範例
以下範例說明如何使用此 EnterWriteLock 方法在寫入模式下進入鎖定。 範例中所示的方法,是在同步快取中新增一對鍵值對。 如果金鑰已經在快取中,內部 Dictionary<TKey,TValue> 拋出的例外可以終止該方法。 使用區 finally 塊來執行 ExitWriteLock 方法,確保呼叫者退出寫入模式。
此程式碼是該類別更大 ReaderWriterLockSlim 範例的一部分。
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
備註
此方法阻塞直到呼叫執行緒進入鎖,因此可能永遠不會返回。 使用該 TryEnterWriteLock 方法在指定區間內封鎖,若呼叫執行緒在此期間未進入寫入模式,則返回。
若其他執行緒已進入鎖定,呼叫該 EnterWriteLock 方法的執行緒會阻塞,直到這些執行緒退出讀取模式。 當有執行緒等待進入寫入模式時,嘗試進入讀取模式或可升級模式的額外執行緒會阻塞,直到所有等待進入寫入模式的執行緒都逾時結束或進入寫入模式後退出。
Note
如果鎖允許遞迴,一個已進入鎖的寫入模式執行緒可以遞迴進入寫入模式,即使其他執行緒正在等待進入寫入模式。