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 该方法的线程会立即进入读取模式,并且不会阻止。

适用于