gpt4 book ai didi

c# - 为什么 ReaderWriterLock 在所有者线程终止时不自动释放/退出?

转载 作者:行者123 更新时间:2023-11-30 16:34:54 25 4
gpt4 key购买 nike

这是一个理论问题;我没有要解决的实际问题,我只想了解其工作方式背后的原因。

我发现,如果一个线程没有退出 ReaderWriterLock,那么即使在原始线程终止后,其他线程也无法获取锁。拥有锁的线程终止后,ReaderWriterLock 不立即将锁授予等待线程是否有充分的理由?

这是一个演示问题的测试用例。

    static void Main(string[] args)
{
ReaderWriterLockSlim readerWriterLock = new ReaderWriterLockSlim();

Thread t1 = new Thread((a) =>
{
readerWriterLock.EnterReadLock();

// this thread omits to Exit the lock....
});

Thread t2 = new Thread((a) =>
{
readerWriterLock.EnterWriteLock();
});

t1.Start();
t2.Start();

// wait for all threads to finish
t1.Join();
t2.Join();
}

最佳答案

简单的答案:没有简单的方法让写入线程知道读取线程已终止,同时又不会使锁定操作变得昂贵。

锁通常作为内存中的值来实现,因此获取和释放锁涉及更改这些值。如果一个线程设置了获取锁的值,然后崩溃,获取另一个锁的唯一方法是如果你有一些后台线程轮询死线程,查看它们最近获取的锁列表,并清理它们。

除了成本高昂且需要大量管道外,它还可能不安全,因为您无法确切知道线程在崩溃前执行了多远。

关于c# - 为什么 ReaderWriterLock 在所有者线程终止时不自动释放/退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2239398/

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