【发布时间】:2012-11-13 22:03:34
【问题描述】:
我有一个问题,我可以用一些代码示例来帮助我,我觉得提供一些背景知识可能会有所帮助。
我需要创建一个包含 3 个队列的引擎(在 C# 中,winforms)。 3 个队列仅包含一个“动作”对象。动作被扔进引擎,并坚持到“最可用”的队列(基本上是计数最少的队列)。队列几乎在所有时间都可以离散和异步运行而不会造成任何伤害。但是,可能会发生一种“动作”情况,当这种类型的“动作”发生并且确实冒泡到队列的前面时,它必须:
- 等待其他队列停止当前操作
- 当他们完成当前操作时锁定/暂停他们
- 单独运行操作直到完成
- 释放对其他 2 个队列的锁定。
另外一个问题是 3 个队列中的任何一个都可以锁定其他 2 个。
有人有这方面的经验吗?
希望如此,这似乎有点痛苦 :-) 在此先感谢
【问题讨论】:
-
这里缺少一个重要信息:那些 SpecialActions - 其中有多少可以同时注册到队列中?是否偶尔会发生一次,并且您可以保证在解决当前问题之前不会出现新的 SpecialAction(如果这是真的,则不必将 SpecialActions 放入队列中!)?或者可能有 100 个这样的 SpecialAction 存储在队列中,并且所有这些都一个接一个地必须停止一切并解决,一次一个(如果这是真的,运行它们的顺序应该是什么)?跨度>
-
羽蛇神这是个好问题。动作就是这四个。 1)从服务器复制文件 2)将文件复制到服务器 3)删除本地文件 4)重新哈希值文件。特殊操作是文件重新哈希,它相当常见(但速度很快),导致它的事件是文件更改事件。然而,哈希表是所有其他 3 个的查找表,因此暂停
-
@conners:我已经根据其他两个发布了我的建议。