异步的线程间通信

时间:2010-08-15 10:17:47

标签: c++ multithreading events boost signals

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

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

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

我会执行异步的线程间通信。

对于循环内的示例性火事件而不阻塞循环

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

谢谢

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

查看ICE messaging

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

有C ++,Obj-C,Java,C#,Python,Ruby和PHP的绑定。