0

如果遇到以下场景:

  1. Thread0 正在运行调用其他组件的代码。
  2. Component0 被 Thread0 调用并触发一个事件。
  3. Eventhandler 尝试通过设置停止标志来停止 thread0
  4. 现在我通常会加入 Thread0 等到清理完所有东西并完成。但如果我这样做,我会造成僵局。所以可以说,我只是将退出完成 Thread0 的标志设置为 true 并返回到 Component0 事件的 Eventhandler。
  5. Eventhandler 的下一行尝试处理 Thread0 正在使用的资源。请记住:Thread0 仍在运行,因为我不能等待它,因为试图停止 Thread0 的事件处理程序是在 Thread0 的上下文中执行的。
  6. 现在 Eventhandler 已完成,Thread0 尝试使用先前处理的资源 > 导致未知行为。

目前,我在处理所有组件后立即要求标志是否已被处置。如果它被处理,我会中断退出线程。

是否有更好的模式来处理这种复杂的行为。

4

1 回答 1

1

Eventhandler 的下一行尝试处理 Thread0 正在使用的资源

这是你的问题。您试图从外部范围释放资源,这通常会导致麻烦。

您是否有一个限制,不允许您在 thread0 执行结束时确定性地释放它使用的资源?如果是这样,请发布更多解释。也许是一个简化的代码示例。

此外,线程和事件处理程序之间的区别在这里也不合适。根据您的描述,我了解到事件处理程序的代码在 thread0 上执行。因此,您应该谈论 2 个或更多组件在某个时候一个接一个地执行,其中一个执行的操作会在同一线程上触发紧随其后运行的组件。

于 2013-10-23T18:47:21.753 回答