各位好日子
我目前正在尝试寻找一种在 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);
由于某种原因,在使用异构进程时,互斥锁似乎被锁定。我的疯狂猜测是互斥锁被抵消了,因此它的价值被破坏了,但我不太确定。
我是否正在尝试完成一些根本不受支持的事情?
任何帮助或建议将不胜感激。