ReaderWriterLockSlim.EnterReadLock 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
嘗試進入讀取模式的鎖定。
public:
void EnterReadLock();
public void EnterReadLock ();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()
例外狀況
RecursionPolicy 屬性是 NoRecursion,且目前的執行緒嘗試在已經保留讀取鎖定的情況下取得讀取鎖定。
-或-
RecursionPolicy 屬性是 NoRecursion,且目前的執行緒嘗試在已經保留寫入鎖定的情況下取得讀取鎖定。
-或-
遞迴的次數會超過計數器的容量。 這項限制非常寬鬆,所以應用程式應該永遠都不會發生這種例外狀況。
範例
下列範例示範如何使用 EnterReadLock 方法來在讀取模式中輸入鎖定。 範例中顯示的 方法會擷取與索引鍵相關聯的值。 如果找不到索引鍵,內部擲回的 Dictionary<TKey,TValue> 例外狀況會允許終止 方法。 區塊 finally
可用來執行 ExitReadLock 方法,以確保呼叫端結束讀取模式。
此程式碼是類別所提供較大範例的 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 string Read(int key)
{
cacheLock.EnterReadLock();
try
{
return innerCache[key];
}
finally
{
cacheLock.ExitReadLock();
}
}
Public Function Read(ByVal key As Integer) As String
cacheLock.EnterReadLock()
Try
Return innerCache(key)
Finally
cacheLock.ExitReadLock()
End Try
End Function
備註
這個方法會封鎖直到呼叫執行緒進入鎖定為止,因此可能永遠不會傳回。 TryEnterReadLock使用 方法來封鎖指定的間隔,然後在呼叫執行緒未在該間隔期間進入讀取模式時傳回 。
多個執行緒可以同時進入讀取模式。
如果一或多個執行緒正在等候進入寫入模式,則會呼叫 EnterReadLock 方法的執行緒會封鎖,直到這些執行緒逾時或進入寫入模式,然後從中結束為止。
注意
如果鎖定允許遞迴,則已進入讀取模式鎖定的執行緒可以遞迴進入讀取模式,即使其他執行緒正在等候進入寫入模式也一樣。
最多一個執行緒可以處於可升級模式,而其他執行緒處於讀取模式。 如果其他執行緒正在等候進入可升級模式,而且沒有線程等候進入寫入模式,則呼叫 EnterReadLock 方法的執行緒會立即進入讀取模式,且不會封鎖。