не удается найти вектор в managed_shared_memory (boost; c )

#c #boost

#c #boost

Вопрос:

Я использую пример из документации boost, но он не работает = (это серверное приложение, и в данном случае все в порядке

 #include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/containers/vector.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <cstring>
#include <cstdlib>
#include <string>

#include <iostream>

using namespace boost::interprocess;

typedef allocator<int,managed_shared_memory::segment_manager>  ShmemAllocator;
typedef vector<int, ShmemAllocator> MyVector;

int main(int argc, char *argv[])
{
      struct shm_remove
      {
         shm_remove() { shared_memory_object::remove("MySharedMemory"); }
         ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
      } remover;

   managed_shared_memory segment(create_only, "MySharedMemory", 65536);
   const ShmemAllocator alloc_inst (segment.get_segment_manager());
   MyVector *myvector = segment.construct<MyVector>("MyVector")(alloc_inst);
   for (int i=0;i<100;i  ) myvector->push_back(i);
   MyVector *myanothervector = segment.find<MyVector>("MyVector").first;
   std::cout<<"foundn";
   for(int i=0;i<100;i  ) std::cout<<(*myanothervector)[i];

   char c;//pause
   std::cin>>c;

   return 0;
}
  

но в клиентском приложении я не могу найти вектор, моя программа зависает, когда я пытаюсь найти вектор в managed_shared_memory (серверное приложение уже запущено и все еще работает при запуске клиентского приложения)

 //client app
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/containers/vector.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <string>
#include <cstdlib> //std::system

#include <iostream>

using namespace boost::interprocess;

typedef allocator<int,managed_shared_memory::segment_manager>  ShmemAllocator;

typedef vector<int, ShmemAllocator> MyVector;

int main(int argc, char *argv[])
{
    managed_shared_memory segment(open_only, "MySharedMemory");
    MyVector *somevector = segment.find<MyVector>("MyVector").first;// my program freezed here
    std::cout<<"foundn";
    for(int i=0;i<100;i  ) std::cout<<(*somevector)[i];
    segment.destroy<MyVector>("MyVector");
}
  

Комментарии:

1. Код в порядке. Вы, должно быть, делаете что-то еще (участвуете в построении вектора или, возможно, запускаете более одного клиента, участвуя в уничтожении). Кроме того, убедитесь, что и сервер, и клиент используют одинаковые флаги компилятора и версии (библиотеки)