Boost logo

Boost Users :

Subject: [Boost-users] [Interprocess] Communication between x86 and x64 issue
From: Toni Neubert (lutztonineubert_at_[hidden])
Date: 2015-07-29 16:02:54


I want to communicate between different platforms using boost interprocess.

I am using vc12 and boost 1.58 on windows 7.

My code below is a very simple example, that should work. But it doesn't
for communications between different platforms...

If I create it in x64 and open in win32, the process stuck at a lock at
function try_based_lock in boost/int/sync/detail/common_algorithms.hpp

In the other way around: win32 create, x64 open: the process crashes at
name_length in segment_manager_helper.hpp while trying to find the name in
index (priv_generic_find in segment_manager).

#include <iostream>
#include <boost/interprocess/managed_shared_memory.hpp>

int main() {
namespace bip = boost::interprocess;

// open in WIN32, create in x64
#ifdef _WIN32
    bip::managed_shared_memory msm(bip::open_only, "TestIPC");
#elsif X64
    bip::shared_memory_object::remove("TestIPC");
    bip::managed_shared_memory msm(bip::create_only, "TestIPC", 4096);
    msm.construct<uint32_t>("Data")[1](10);
#endif

// Get Data and print it
auto data = msm.find<uint32_t>("Data");
if (data.second == 1) {
    std::cout << *data.first << std::endl;
}
std::cin.ignore();

return 0;
}

Does anybody have experience in this? Thank you in advance!



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net