C#多线程死锁问题

问题描述 投票:-1回答:2

我正在用C#编写一个相当大的应用程序,它有2个异步线程,一个线程接收商品价格数据流,而一个线程接收订单明细流。

这些线程中的每一个都使用各自的ReaderWriterLockSlim构建传入价格/订单数据的列表。将传入数据移到列表时,设置为写锁定模式。

传入流的频率变化很大且不可预测,有时商品价格数据包可能以10 ish millisec的间隔进入,因此我需要对此进行有效编码,否则它将变得非常缓慢。

最初,我只是在读取主线程中的列表(ReaderWriterLockSlim读取锁),所以工作正常。但是,我现在有一个要求,有时我需要在主线程中对两个数据列表进行一些写操作。是的,您猜对了,有了额外的写锁,我现在得到了随机死锁,我可以肯定这是由交错访问2个独立锁引起的经典死锁。

由于传入数据的非常异步的性质,相对于我的主线程在两个列表上进行的任何处理,我无法预测何时这些线程将被写入或读取以锁定列表。

据我所知,这总是容易陷入僵局。我非常执着于如何更改体系结构以解决此死锁问题。

如果有人能提出一些有关如何解决此问题的想法,我将非常感激。

感谢您的期待。

问候杰夫

c# multithreading deadlock
2个回答
0
投票

我可以想到的一种简单方法是在主线程中维护一条消息队列,其中每条消息将包含您拥有的两个流之一中的流,并且您可以根据中的另一个参数来区分两个流消息。


0
投票

((1)当您描述代码而不是显示代码时,很难说出问题出在哪里。

© www.soinside.com 2019 - 2024. All rights reserved.