我正在研究工作队列处理器的设计,其中QueueProcessor从队列中检索命令模式对象并在新线程中执行它. 我试图了解一个潜在的Queue锁定场景,其中嵌套的命令可能导致死锁. 例如. 将FooComman
我试图了解一个潜在的Queue锁定场景,其中嵌套的命令可能导致死锁.
例如.
将FooCommand对象放置在QueueProcessor然后在其自己的线程中执行的队列中.
执行FooCommand将BarCommand放入队列.
假设允许的最大线程数仅为1个线程,则QueueProcessor将处于死锁状态,因为FooCommand无限期等待BarCommand完成.
如何管理这种情况?队列对象是作业的正确对象吗?是否有任何制衡措施可以解决这个问题?
非常感谢. (应用程序使用C#.NET 3.0)
对于像这样的简单情况,可以根据需要分离更多线程的附加监视线程是有帮助的.基本上每N秒检查一次作业是否已完成,如果没有,则添加另一个线程.
这不一定能处理更复杂的死锁问题,但它会解决这个问题.
我对更重的问题的建议是限制等待新生成的进程,换句话说,你只能等待你开始的事情,这样你永远不会遇到死锁,因为在那种情况下循环是不可能的.