加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在多线程工作队列处理器中管理ThreadPool饥饿?

发布时间:2020-12-16 01:28:59 所属栏目:百科 来源:网络整理
导读:我正在研究工作队列处理器的设计,其中QueueProcessor从队列中检索命令模式对象并在新线程中执行它. 我试图了解一个潜在的Queue锁定场景,其中嵌套的命令可能导致死锁. 例如. 将FooCommand对象放置在QueueProcessor然后在其自己的线程中执行的队列中. 执行FooC
我正在研究工作队列处理器的设计,其中QueueProcessor从队列中检索命令模式对象并在新线程中执行它.

我试图了解一个潜在的Queue锁定场景,其中嵌套的命令可能导致死锁.

例如.

将FooCommand对象放置在QueueProcessor然后在其自己的线程中执行的队列中.

执行FooCommand将BarCommand放入队列.

假设允许的最大线程数仅为1个线程,则QueueProcessor将处于死锁状态,因为FooCommand无限期等待BarCommand完成.

如何管理这种情况?队列对象是作业的正确对象吗?是否有任何制衡措施可以解决这个问题?

非常感谢. (应用程序使用C#.NET 3.0)

解决方法

对于像这样的简单情况,可以根据需要分离更多线程的附加监视线程是有帮助的.

基本上每N秒检查一次作业是否已完成,如果没有,则添加另一个线程.

这不一定能处理更复杂的死锁问题,但它会解决这个问题.

我对更重的问题的建议是限制等待新生成的进程,换句话说,你只能等待你开始的事情,这样你永远不会遇到死锁,因为在那种情况下循环是不可能的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读