gpt4 book ai didi

c# - ReaderWriterLockSlim 和计时器

转载 作者:行者123 更新时间:2023-12-01 20:13:09 26 4
gpt4 key购买 nike

我对 ReaderWriterLockSlim 和延迟 ExitWriteLock 感到沮丧。为什么定时器回调中会释放WriteLock?

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);

最佳答案

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

写锁未释放,只是您为 Timer 指定的回调在不同的线程上运行,并且该线程持有写锁,因此断言 Assert.AreEqual(true, _lock.IsWriteLockHeld); 回调中失败,引发异常。

一个线程进入锁,并且只有该线程的 IsWriteLockHeld 才为 true,并且只有该线程才能退出锁。

关于c# - ReaderWriterLockSlim 和计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com