ReaderWriterLockSlim.TryEnterWriteLock 方法

定义

尝试进入写入模式锁定状态,可以选择超时时间。

重载

TryEnterWriteLock(Int32)

尝试进入写入模式锁定状态,可以选择超时时间。

TryEnterWriteLock(TimeSpan)

尝试进入写入模式锁定状态,可以选择超时时间。

TryEnterWriteLock(Int32)

Source:
ReaderWriterLockSlim.cs
Source:
ReaderWriterLockSlim.cs
Source:
ReaderWriterLockSlim.cs

尝试进入写入模式锁定状态,可以选择超时时间。

public:
 bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock (int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean

参数

millisecondsTimeout
Int32

等待的毫秒数,或为 -1 (Infinite),表示无限期等待。

返回

如果调用线程已进入写入模式,则为 true;否则为 false

例外

RecursionPolicy 属性为 NoRecursion,而且当前线程已进入锁定状态。

- 或 -

初始状态下,当前线程进入读取模式锁定状态,因此尝试进入写入模式将有可能导致死锁。

- 或 -

递归数将超出该计数器的容量。 此限制数值很大,因此任何情况下应用程序都不应遇到此情况。

millisecondsTimeout 的值为负,但不等于 Infinite (-1),这是唯一允许使用的负值。

示例

以下示例演示如何使用 TryEnterWriteLock 方法在写入模式下以超时进入锁。示例中所示的 方法将新的键/值对添加到同步缓存。 如果指定的超时间隔在线程进入锁之前已过,则 该方法返回 false。 如果添加了键/值对,方法将返回 true

如果密钥已位于缓存中,则允许内部 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 bool AddWithTimeout(int key, string value, int timeout)
{
    if (cacheLock.TryEnterWriteLock(timeout))
    {
        try
        {
            innerCache.Add(key, value);
        }
        finally
        {
            cacheLock.ExitWriteLock();
        }
        return true;
    }
    else
    {
        return false;
    }
}
Public Function AddWithTimeout(ByVal key As Integer, ByVal value As String, _
                               ByVal timeout As Integer) As Boolean
    If cacheLock.TryEnterWriteLock(timeout) Then
        Try
            innerCache.Add(key, value)
        Finally
            cacheLock.ExitWriteLock()
        End Try
        Return True
    Else
        Return False
    End If
End Function

注解

如果 millisecondsTimeout 为 0 (零) ,此方法将检查锁定状态,并在所需状态不可用时立即返回 false

如果其他线程在读取模式下进入锁,则调用 方法的 TryEnterWriteLock 线程将一直阻止,直到这些线程退出读取模式或超时间隔已过。 当线程被阻止以等待进入写入模式时,尝试进入读取模式或可升级模式的其他线程会阻止,直到所有等待进入写入模式的线程都超时或进入写入模式,然后退出该模式。

注意

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

适用于

TryEnterWriteLock(TimeSpan)

Source:
ReaderWriterLockSlim.cs
Source:
ReaderWriterLockSlim.cs
Source:
ReaderWriterLockSlim.cs

尝试进入写入模式锁定状态,可以选择超时时间。

public:
 bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock (TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean

参数

timeout
TimeSpan

等待的间隔;或为 -1 毫秒,表示无限期等待。

返回

如果调用线程已进入写入模式,则为 true;否则为 false

例外

RecursionPolicy 属性为 NoRecursion,而且当前线程已进入锁定状态。

- 或 -

初始状态下,当前线程进入读取模式锁定状态,因此尝试进入写入模式将有可能导致死锁。

- 或 -

递归数将超出该计数器的容量。 此限制数值很大,因此任何情况下应用程序都不应遇到此情况。

timeout 的值为负,但不等于 -1 毫秒,这是唯一允许使用的负值。

- 或 -

的值 timeout 大于 Int32.MaxValue 毫秒。

注解

如果 timeout 为 0 (零) ,此方法将检查锁定状态,并在所需状态不可用时立即返回 false

如果其他线程在读取模式下进入锁,则调用 方法的 TryEnterWriteLock 线程将一直阻止,直到这些线程退出读取模式或超时间隔已过。 当线程被阻止以等待进入写入模式时,尝试进入读取模式或可升级模式的其他线程会阻止,直到所有等待进入写入模式的线程都超时或进入写入模式,然后退出该模式。

注意

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

适用于