ReaderWriterLockSlim.TryEnterWriteLock 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
尝试进入写入模式锁定状态,可以选择超时时间。
重载
TryEnterWriteLock(Int32) |
尝试进入写入模式锁定状态,可以选择超时时间。 |
TryEnterWriteLock(TimeSpan) |
尝试进入写入模式锁定状态,可以选择超时时间。 |
TryEnterWriteLock(Int32)
尝试进入写入模式锁定状态,可以选择超时时间。
public:
bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock (int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean
参数
返回
如果调用线程已进入写入模式,则为 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)
尝试进入写入模式锁定状态,可以选择超时时间。
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 该方法的线程会阻止这些线程退出读取模式,或直到超时间隔已过。 当线程被阻止等待进入写入模式时,尝试进入读取模式或可升级模式的其他线程会阻止,直到等待进入写入模式的所有线程超时或进入写入模式,然后退出写入模式。
备注
如果锁允许递归,则写入模式下已进入锁的线程可以递归进入写入模式,即使其他线程正在等待进入写入模式。