好日子夥計,64位和32位進程互通boost :: message_queue
我目前正試圖想象一種方式來傳遞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位。但如果這兩個過程不一樣,則不起作用。
升壓尋找更深(1.50.0)的代碼,你會看到在message_queue_t以下行:: do_receive(升壓/間/ IPC/message_queue.hpp):
scoped_lock lock(p_hdr->m_mutex);
出於某種原因,在當處理異構進程時,互斥鎖似乎被鎖定。我瘋狂的猜測是互斥體被抵消了,因此它的價值被破壞了,但我不太確定。
我想完成一些根本不支持的功能嗎?
任何幫助或建議將不勝感激。
這不是一個瘋狂的猜測,這是準確的。他們把互斥量放在共享內存中,並且它的大小取決於位數。你無法完成這項工作。 – 2012-08-11 19:10:01