ReaderWriterLockSlim.EnterWriteLock 方法

定义

尝试进入写入模式锁定状态。

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 线程会阻塞,直到这些线程退出读取模式。 当有线程等待进入写入模式时,尝试进入读取模式或可升级模式的其他线程会阻塞,直到所有等待进入写入模式的线程都超时或进入写入模式,然后退出写入模式。

注意

如果锁允许递归,则已进入写入模式锁定的线程可以递归方式进入写入模式,即使其他线程正在等待进入写入模式。

适用于