这是关于在这种情况下消息队列与共享内存的适用性或适用性:
多个DLL或共享库
每个库都会尝试与我的主应用程序DLL或共享库进行通信,例如,所有DLL的I / P和O / P或共享库将通过我的主应用程序的共享库进行通信。这些通信是异步的。
除了我的应用程序的.so之外,一些DLL或共享库将创建多个线程,并且每个这样的线程的输出需要传送回我的应用程序库。这些线程的输出再次是ASYNCHRONOUS。
我的主要应用程序DLL / .so将继续其他工作,很可能它通过网络与某些服务器进行通信,并相应地做出响应
所有其他DLL / .so的功能都是异步的
问题2:使用共享内存在多个共享库之间强制同步的任何引用或链接?
答案 0 :(得分:1)
我猜你对这个问题的理解是错误的:
您不需要具有您提供的规格的共享内存。如果满足以下条件之一,则共享内存很有用:
现在,您需要为您的代码选择协议来进行对话。我建议使用英特尔线程构建模块(TBB,它将回答Q2)。它们为你想要达到的目标提供不同层次的抽象,但我不知道为你选择,但是,花一些时间阅读(长篇)文档。
答案 1 :(得分:0)
有一点需要注意,我只是在最一般意义上理解你的应用程序,我认为消息队列是一个简单的提供你传递的msgs是有界限的,适合于队列与
您似乎关注的两个主要问题是同步和异步。 (1)POSIX消息队列已经内置了队列同步。这是一个令人头疼的问题。 (2)在Linux下,队列id mqd_t是文件描述符,这意味着它可以在select
语句中使用。这样可以解决异步问题。在您的主DLL中,您可以在select
语句中为所有队列加载mqd_t描述符,并在它们到达时使用一致,调试且易于理解的机制处理您的DLL消息。 (3)与共享内存相比,您丢失的效率(与大多数应用程序相比很小)比使用msg队列相对容易以及主应用程序DLL将花费相对的事实更多无论如何,长时间等待网络I / O与服务器。