大家好,
我正在尝试找到一种方法来在64位进程和32位进程之间传递数据。由于这是一个实时应用程序,两个进程都在同一台计算机上运行,我想使用共享内存(shm)。
当我正在寻找一些使用shm的同步机制时,我发现了boost :: message_queue。但它不能工作。
我的代码基本上如下所示:
发送器部分
message_queue::remove("message_queue");
message_queue mq(create_only, "message_queue", 100, sizeof(uint8_t));
for (uint8_t i = 0; i < 100; ++i)
{
mq.send(&i, sizeof(uint8_t), 0);
}
接收器部分
message_queue mq(open_only, "message_queue");
for (uint8_t i = 0; i < 100; ++i)
{
uint8_t v;
size_t rsize;
unsigned int rpriority;
mq.receive(&v, sizeof(v), rsize, rpriority);
std::cout << "v=" << (int) v << ", esize=" << sizeof(uint8_t) << ", rsize=" << rsize << ", rpriority=" << rpriority << std::endl;
}
如果两个进程都是64位或32位,此代码将完美运行。但如果两个进程不同,则不起作用。
在深入研究boost(1.50.0)代码后,您会在message_queue_t :: do_receive(boost / interprocess / ipc / message_queue.hpp)中看到以下行:
scoped_lock lock(p_hdr->m_mutex);
由于某种原因,在处理异构进程时,互斥锁似乎被锁定了。 我的猜测是,由于互斥锁被偏移,因此其值已损坏,但我不能确定。
我试图实现的东西是否被支持?
任何帮助或建议将不胜感激。