异步的线程间通信

3
我正在制作一个跨平台程序,其中嵌入了一个小型RARP服务器(使用winpcap/pcap实现)并运行着2个TCP IP服务器。我必须使用C++。
因此,我至少需要4个线程,其中一个是控制器,另外两个是TCP/IP异步套接字,还有一个是RARP服务器。
我计划使用c++ BOOST Asio和Thread,因为我需要在Linux和Windows XP中运行此程序(而且我不能使用Qt)。
我想要执行异步线程间通信。
例如,在循环内触发事件,而不会阻塞该循环。
我该如何做呢?最好使用一个可移植的库。
谢谢。

4
如果你提出一个更具体的问题,你会更容易得到答案。你的问题有几个,有些与其他问题无关,非常零散。 - SoapBox
2个回答

3
没有通用的解决方案,你不能打断线程并传递要处理的通知。这会导致可怕的重入问题和大规模的死锁。只有当线程处于静止状态时,才能处理通知。
操作系统通常提供了可用的服务来实现这一点。在Windows中,通常通过向消息队列发送消息来完成。在消息循环中读取,这是UI线程的'空闲'状态。或者通过利用异步过程调用,在线程阻塞时触发并显式地允许APC运行。
但如果您要求一个非平台特定的解决方案,则无法使用此方法。在这种情况下,你基本上注定要重新发明一个操作系统的功能。你需要一个线程安全的队列,在需要接收通知的线程中轮询。这就是消息队列,由消息循环读取。

因为我已经使用了Boost Asio,所以我正在使用Boost Asio io_service对象来进行异步函数调用。谢谢。 - MiniScalope

2

请查看ICE消息传递

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接