ReaderWriterLockSlim.EnterReadLock 方法

定義

嘗試進入讀取模式的鎖定。

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 方法的執行緒會立即進入讀取模式,且不會封鎖。

適用於