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 執行緒會封鎖,直到這些執行緒結束讀取模式為止。 當有線程等候進入寫入模式時,嘗試進入讀取模式或可升級模式的其他執行緒會封鎖,直到所有等候進入寫入模式的執行緒逾時或進入寫入模式,然後從中結束為止。
注意
如果鎖定允許遞迴,在寫入模式中輸入鎖定的執行緒可以遞迴進入寫入模式,即使其他執行緒正在等候進入寫入模式也一樣。