Доброго времени суток,
В настоящее время я пытаюсь найти способ передачи данных между 64-битным процессом и 32-битным процессом. Поскольку это приложение реального -времени, и оба работают на одном компьютере, я жестко использую общую память (shm ).
Пока искал какой-нибудь механизм синхронизации с помощью shm, нащупал очередь сообщений boost ::_. Однако это не работает.
Мой код в основном следующий:
Часть отправителя
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 _очередь.hpp):
scoped _блокировка блокировка (p _hdr ->m _мьютекс );
Почему-то в мьютексе вроде блокируется при работе с разнородными процессами. Мое дикое предположение будет заключаться в том, что мьютекс смещен, и поэтому его значение повреждено, но я не совсем уверен.
Я пытаюсь выполнить что-то, что просто не поддерживается?
Любая помощь или совет будут оценены.