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