gpt4 book ai didi

c# - 如何同步这些线程以避免数据损坏?

转载 作者:行者123 更新时间:2023-11-30 22:50:28 25 4
gpt4 key购买 nike

TL;DR 版本:我有两个线程。其中一个可能需要 Interrupt() 另一个,但前提是另一个线程正在处理与受第一个线程影响的对象相关的数据。我怎样才能根据特定条件只中断()第二个线程。

我一直在开发一个程序,该程序启动两个线程来处理套接字数据并使用信息更新 GUI。这两个线程(topologyThread 和 dataThread)处理我的应用程序的两个不同方面,即无线传感器网络的拓扑更改通知,以及从无线传感器网络接收和处理数据的数据信息。

当数据进入 dataThread 时,数据包所代表的网络成员可能已被 topologyThread 删除,因此不应进行处理。所以,我在想,使用 Thread.Interrupt() 方法可以让我立即通知 dataThread 拓扑的更改,并防止我们在尝试使用网络成员的数据更新 GUI 时看到的一些问题,即不再连接。我的问题是:如何判断 dataThread 是否需要中断?我不希望它在为仍处于连接状态的网络成员处理数据时抛出异常,但如果它正在为随后断开连接的网络成员处理数据,我希望它被中断。

场景 1:

  • 数据通过 dataThread 传入。
  • dataThread 确保网络成员仍然是网络的一部分。
  • dataThread处理数据到最后并更新GUI

场景 2:

  • 数据通过 dataThread 传入。
  • dataThread 确保网络成员仍然是网络的一部分。
  • 网络成员已断开连接,因此不会进行任何处理。

场景 3:

  • 数据通过 dataThread 传入。
  • dataThread 确保网络成员仍然是网络的一部分。
  • dataThread 开始处理数据
  • topologyThread 收到网络成员已断开连接的通知并将其从拓扑中删除。
  • dataThread 尝试为不再连接的网络成员更新 GUI。

这是我正在尝试编写代码的场景 3。在我们的测试中,这种情况是边栏中的 TreeView 卡住并且必须终止应用程序。但是如果受 topologyThread 影响的对象是 dataThread 当前正在作用的对象,我只需要中断 dataThread。

感谢阅读。 :)

最佳答案

你不应该打断你的话题。使用 EventWaitHandles 对它们进行编程可能会更安全,EventWaitHandles 可以根据您要实现的目标触发信号。

关于c# - 如何同步这些线程以避免数据损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/553737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com