buena gente día,de 64 bits y 32 bits de intercomunicación proceso de impulso :: message_queue
Actualmente estoy tratando de encontrar una manera de pasar datos entre un proceso de 64 bits y un proceso de 32 bits. Como es una aplicación en tiempo real y ambos se ejecutan en la misma computadora, utilizo la memoria compartida (shm).
Mientras buscaba algún mecanismo de sincronización usando shm, me sentí en boost :: message_queue. Sin embargo, no está funcionando.
Mi código es básicamente la siguiente:
parte del remitente
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);
}
parte del receptor
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;
}
Este código funciona perfectamente si los dos procesos son de 64 bits o 32 bits. Pero no funciona si los dos procesos no son lo mismo.
Mirando más profundamente en el impulso (1.50.0) código que veremos la siguiente línea en message_queue_t :: do_receive (realce/entre procesos/IPC/message_queue.hpp):
scoped_lock lock(p_hdr->m_mutex);
Por alguna razón, en el mutex parece estar bloqueado cuando se trabaja con procesos heterogéneos. Creo que el mutex está compensado y, por lo tanto, su valor está dañado, pero no estoy seguro.
¿Estoy tratando de lograr algo que simplemente no es compatible?
Cualquier ayuda o consejo será apreciado.
No fue una suposición descabellada, eso es exacto. Ponen el mutex en la memoria compartida y está precedido por miembros cuyo tamaño depende de la bitness. No puedes hacer que esto funcione. –