64-битный и 32-битный обмен данными между процессами, ускорение ::сообщение _очередь

Доброго времени суток,

В настоящее время я пытаюсь найти способ передачи данных между 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 _мьютекс );

Почему-то в мьютексе вроде блокируется при работе с разнородными процессами. Мое дикое предположение будет заключаться в том, что мьютекс смещен, и поэтому его значение повреждено, но я не совсем уверен.

Я пытаюсь выполнить что-то, что просто не поддерживается?

Любая помощь или совет будут оценены.

8
задан samuel 11 August 2012 в 13:33
поделиться