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秒检查一次作业是否已完成,如果没有,则添加另一个线程. 这不一定能处理更复杂的死锁问题,但它会解决这个问题. 我对更重的问题的建议是限制等待新生成的进程,换句话说,你只能等待你开始的事情,这样你永远不会遇到死锁,因为在那种情况下循环是不可能的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |