Boost를 활용해 공유 메모리에 STL Container 사용하는 방법
프로그래밍???/C/C++2015. 7. 10. 10:00
공유메모리에 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
개발 과정에서 알아낸 몇가지 사항과 이슈 사항을 적도록 한다.
- 공유 메모리를 생성하고 해당 인스턴스를 삭제해도 데이터는 접근 가능하다
- 위의 사항은 다중 프로세스나 다중 쓰레드에서 사용하는 내용을 이해한다면 당연한 부분이다.
- 적용하는 프로세스가 fork를 사용하기 때문에 불필요한 부담을 없애기 위해 공유 메모리와 맵을 구성하고 바로 삭제하였다
- 해당 공유 메모리와 맵을 사용하는데 있어 특이 사항이 있었다
- 사용처에서 managed_shared_memory와 find()를 통해 해당 map을 검색할 수 있다
- 문제는 managed_shared_memory 인스턴스가 삭제된다면 해당 맵 포인터는 유지하지만 데이터에 접근이 불가능하다
- 따라서 공유메모리 사용 클래스를 고려한다면 인스턴스를 통해 맵을 사용하는 동안에는 반드시 managed_shared_memory 를 유지해야 한다
관련하여 IBM 홈페이지에 재밋는 자료를 공유한다
IPC 및 MPI 라이브러리를 사용하여 Boost로 동시 프로그래밍
'프로그래밍??? > C/C++' 카테고리의 다른 글
기존에 제작했던 pcqueue 샘플 코드 (0) | 2016.07.13 |
---|---|
Bad cast exception on poco-library when I tried to cast Int64 (0) | 2015.07.30 |
Creating STL Containers in Shared Memory (0) | 2015.07.10 |
공유 메모리에 STL Container를 올리려고 하게 된 연유 (0) | 2015.07.10 |
AES의 block mode 관련 사항 (0) | 2015.05.08 |