首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程问题(追逐自己的尾巴)

线程问题(追逐自己的尾巴)
EN

Stack Overflow用户
提问于 2008-12-08 13:25:38
回答 4查看 324关注 0票数 1

ConnectionManager在等待传入的连接。对于每个传入连接,它创建一个Connection实例,该实例处理此连接上的入站和出站通信量。每个Connection都有一个Watchdog,它处理“坏连接”条件,并调用已注册的"Listerners“。一个“侦听器”是ConnectionManager,它关闭连接并删除Connection实例,后者反过来删除相应的看门狗。

等。A.分钟。

Watchdog调用删除删除WatchdogConnectionConnectionManager?看门狗追逐自己的尾巴。

我被完全堵住了。我该怎么解决这个问题?

解决方案:我将使侦听器变得异步,尽管我还不知道如何做到这一点,而不会带来太多的痛苦。Watchdog不知道ConnectionManager的事。这是相当通用的。此外,with 32-Thread没有类似于“联接”的东西,所以我可能需要使用GetExitCodeThread()STILL_ACTIVE来滚动我自己的.

谢谢伙计们。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-08 13:48:15

如果看门狗运行在不同的线程中,那么问题就不太严重了--看门狗用异步消息指示ConnectionManager删除,然后退出它自己的线程。

同时,ConnectionManager线程获取删除消息,并开始删除看门狗。

为了避免比赛条件,看门狗析构函数应该加入看门狗线程,并清理线程。(也可能是向看门狗线程发出信号,或者断言()关于看门狗线程准备退出的内容)。

票数 2
EN

Stack Overflow用户

发布于 2008-12-08 13:35:06

发短信。

与其让看门狗调用ConnectionManager的方法,不如向连接管理器中的队列发送一条消息。此队列需要线程安全。当ConnectionManager在其线程中处理队列时,等待连接线程结束是安全的。

代码语言:javascript
复制
Watchdog          Queue               ConnectionManager
   |                |                        |
Kill Connection---->|                        |
   |                |<-------------------Get Message
  ---               |                        |
                    |-------------------->Process Message
                    |                        |
                    |                     Kill Connection
票数 4
EN

Stack Overflow用户

发布于 2008-12-08 13:36:07

如果每个对象都在自己的线程中运行,则没有问题。

看门狗通知ConnectionManager并返回。

此时,看门狗线程可以退出。

当ConnectionManager注意到看门狗事件时,它会杀死连接线程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/349544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档