Я хочу избежать копирования данных, которые необходимо передать работникам.
Моя идея заключалась в том, чтобы отправить указатель на данные как сообщение zmq.
Это работает. Но я обнаружил, что если я меняю данные внутри воркера, то продюсер (основной) этого не видит. Интересно, почему!
Вот пример:
Код: Выделить всё
#include
#include
#include
#include
#include
struct Foo {
explicit Foo(int value) noexcept
: _value{value}
{}
int _value;
};
void worker(void *context)
{
void *receiver = zmq_socket(context, ZMQ_REP);
zmq_connect(receiver, "inproc://example");
std::this_thread::sleep_for(std::chrono::milliseconds(20));
zmq_msg_t message;
zmq_msg_init(&message);
zmq_msg_recv(&message, receiver, 0);
char received[sizeof(Foo *)];
std::memcpy(&received, zmq_msg_data(&message), sizeof(Foo *));
//reinterpret_cast(received)->_value = 111;
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78770967/zeromq-c-sending-pointer-with-inproc[/url]