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 该方法的线程将阻止,直到这些线程退出读取模式。 当有线程等待进入写入模式时,尝试进入读取模式或可升级模式的其他线程将阻止,直到等待进入写入模式的所有线程超时或进入写入模式,然后退出写入模式。
注释
如果锁允许递归,则以写入模式进入锁的线程可以递归进入写入模式,即使其他线程正在等待进入写入模式。