c++ - 线程问题(追自己的尾部)

标签 c++ multithreading

ConnectionManager 等待传入的连接。对于每个传入连接,它都会创建一个 Connection 实例来处理此连接上的入站和出站流量。每个 Connection 都有一个 Watchdog 来处理“不良连接”情况并调用已注册的“Listerners”。一个“监听器”是 ConnectionManager,它关闭连接并删除 Connection 实例,后者又删除相应的看门狗。

等等。 A. 分钟。

Watchdog 调用 ConnectionManager 删除 Connection 又删除 Watchdog?看门狗追着自己的尾部。

我完全被封锁了。我该如何解决这个问题?


解决方案:我会让 Listener 变成异步的,尽管我还不知道如何做到这一点才不会太痛苦。 Watchdog 不知道 ConnectionManager。这是相当通用的。此外,Win32-Thread-API 没有类似“加入”的功能,因此我可能需要使用 GetExitCodeThread()STILL_ACTIVE...

谢谢,伙计们。

最佳答案

消息。

不是让 Watchdog 调用 ConnectionManager 的方法,而是将消息发布到连接管理器中的队列。这个队列需要是线程安全的。当 ConnectionManager 在其线程中处理队列时,等待 Connection 线程结束是安全的。

Watchdog          Queue               ConnectionManager
   |                |                        |
Kill Connection---->|                        |
   |                |<-------------------Get Message
  ---               |                        |
                    |-------------------->Process Message
                    |                        |
                    |                     Kill Connection

关于c++ - 线程问题(追自己的尾部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/349544/

相关文章:

java - 构造函数的结尾恰好 - 在 Java 中的关系之前

java - 在 Java 的多线程应用程序中移动图像/形状

c++ - 如果键不存在,为什么 std::map operator[] 会创建一个对象?

android - TarsosDSP 和 SurfaceView 多线程问题

c++ - 制作空 C++ 项目 : General exception (Exception from HRESULT:0x80131500) Visual Studio Community 2015

c++ - 匹配多个组的正则表达式

multithreading - 如何在等待先前线程完成时暂停Thread::Queue访问?

c - 无锁链表的性能比有锁链表差

c++ - 将 QFiles 正确地存储在一个集合中

c++ - 如何将二维数组相互分配?