首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReaderWriterLockSlim与定时器

ReaderWriterLockSlim与定时器
EN

Stack Overflow用户
提问于 2015-01-29 09:28:52
回答 1查看 188关注 0票数 2

我对ReaderWriterLockSlim和延迟ExitWriteLock感到失望。为什么WriteLock是在计时器回调中发布的?

代码语言:javascript
复制
var _lock = new ReaderWriterLockSlim();
_lock.EnterWriteLock();
Assert.AreEqual(true, _lock.IsWriteLockHeld);   // good

System.Threading.Timer timer = new Timer(state =>
{
    _lock.ExitWriteLock(); //throws exception that lock is not held
}, null, 1, -1);

Thread.Sleep(1000);
Assert.AreEqual(false, _lock.IsWriteLockHeld);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 09:40:11

从构造函数的外观来看,您使用的是System.Threading.Timer。该计时器的回调运行在线程池线程上。

写锁没有释放,只是您为计时器指定的回调运行在不同的线程上,而该线程不包含写锁,因此回调中的断言Assert.AreEqual(true, _lock.IsWriteLockHeld);失败,导致异常。

一个线程进入一个锁,只有该线程IsWriteLockHeld保持真,只有该线程才能退出锁。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28211125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档