흐르는 시간의 블로그...

공유메모리에 STL Container를 사용하는 방법을 검색해보니...

역시나 Stack Overflow로 간다.


How to store stl objects in shared memory (C++)?


선택된 답에 보면 boost::interprocess를 사용하라 한다.

그 내용을 좀 보면 결국 앞쪽에서 본 allocator를 제작해야 함을 알 수 있다.


자세히 들어가보자.

...


Boost shared memory 에서 map 사용하기 allocator 이용해서


Chapter 14. Boost.Interprocess



관련하여 fork로 부모 프로세스와 자식프로세스간에 사용하는 예제

Using shared memory as a pool of unnamed memory blocks




개발 과정에서 알아낸 몇가지 사항과 이슈 사항을 적도록 한다.

  1. 공유 메모리를 생성하고 해당 인스턴스를 삭제해도 데이터는 접근 가능하다
  2. 위의 사항은 다중 프로세스나 다중 쓰레드에서 사용하는 내용을 이해한다면 당연한 부분이다.
  3. 적용하는 프로세스가 fork를 사용하기 때문에 불필요한 부담을 없애기 위해 공유 메모리와 맵을 구성하고 바로 삭제하였다
  4. 해당 공유 메모리와 맵을 사용하는데 있어 특이 사항이 있었다
  5. 사용처에서 managed_shared_memory와 find()를 통해 해당 map을 검색할 수 있다
  6. 문제는 managed_shared_memory 인스턴스가 삭제된다면 해당 맵 포인터는 유지하지만 데이터에 접근이 불가능하다
  7. 따라서 공유메모리 사용 클래스를 고려한다면 인스턴스를 통해 맵을 사용하는 동안에는 반드시 managed_shared_memory 를 유지해야 한다





관련하여 IBM 홈페이지에 재밋는 자료를 공유한다


IPC 및 MPI 라이브러리를 사용하여 Boost로 동시 프로그래밍