异步线程间通信

Posted

技术标签:

【中文标题】异步线程间通信【英文标题】:asynchronous Inter thread communication 【发布时间】:2010-08-15 10:17:46 【问题描述】:

我正在制作一个跨平台程序,它嵌入了一个小型 RARP 服务器(使用 winpcap/pcap 实现)并运行 2 个 TCP IP 服务器。我必须使用 C++。

所以我将至少有 4 个线程,主要的线程包括控制器、2 个 TCP/IP 异步套接字和 RARP 服务器。

我计划使用 c++ BOOST Asio 和 Thread,因为我需要在 linux 和 windows XP 中运行这个程序。 (而且我不能使用 Qt)

我将执行。

例如循环内的触发事件而不阻塞循环

我该怎么做?最好有便携式图书馆。

谢谢

【问题讨论】:

我认为如果你问这个问题的更窄版本,你会更幸运地得到答案。您在这里有几个问题,有些与其他问题无关....非常分散。 【参考方案1】:

对此没有通用的解决方案,您不能只是中断线程并传递要处理的通知。这会导致可怕的重入问题和大量僵局。只有当线程处于静止状态时才能处理通知。

操作系统通常具有使之成为可能的可用服务。在 Windows 中,这通常通过将消息发布到消息队列来完成。由消息循环读取,这是 UI 线程的“空闲”状态。或者通过利用异步过程调用,在线程阻塞并明确允许 APC 运行时触发。

但是您通过需要非平台特定的解决方案来切断这一点。在这种情况下,您几乎注定要重新发明操作系统功能。您需要在需要接收通知的线程中轮询的线程安全队列。消息队列,由消息循环读取。

【讨论】:

因为我已经在使用 boost asio,所以我使用 boost asio io_service 对象来进行异步函数调用。谢谢。【参考方案2】:

看看ICE messaging

它支持进程之间的同步和异步消息传递,无论它们是否在同一个节点上。

有 C++、Obj-C、Java、C#、Python、Ruby 和 php 的绑定。

【讨论】:

以上是关于异步线程间通信的主要内容,如果未能解决你的问题,请参考以下文章

线程间的通信同步方式与进程间通信方式

线程间通信

线程间通信

七. 多线程编程9.线程间通信

Qt例子,线程间通信,如何在线程外部对线程进行控制,问题请看问题补充,多谢了先

关于eventfd,epoll,线程间通信小记