码迷,mamicode.com
首页 > 其他好文 > 详细

boost::interprocess::managed_shared_memory(2)(std::deque)

时间:2014-05-30 11:23:53      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:des   c   style   class   blog   code   

bubuko.com,布布扣
struct shareDataEx : shareData
{
    int index;
    int total_size;
};
typedef managed_shared_memory::segment_manager        segment_manager_t;  //段管理器
typedef allocator<shareDataEx, segment_manager_t>   mem_allocator;  //定义基于shareDataEx类型的分配器
typedef deque<shareDataEx, mem_allocator>           mem_queue;  //创建deque基于boost::Interprocess::containers::deque,使用mem_allocator分配器
m_segment = new managed_shared_memory(open_or_create, getMemName(m_name + "ProcessMemPool9", pid).c_str(), 1024*1024*10);
m_queue = m_segment->find_or_construct<mem_queue>(getMemName(m_name + "m_queue", pid).c_str())(mem_allocator(m_segment->get_segment_manager()));  
bubuko.com,布布扣
mem_allocator(m_segment->get_segment_manager()好像是分配deque兼容的分配器,不是太懂,有时间看看下面这个例子:
bubuko.com,布布扣
#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

using namespace boost::interprocess;

//Define an STL compatible allocator of ints that allocates from the managed_shared_memory.
//This allocator will allow placing containers in the segment
typedef allocator<int, managed_shared_memory::segment_manager>  ShmemAllocator;

//Alias a vector that uses the previous STL-like allocator so that allocates
//its values from the segment
typedef vector<int, ShmemAllocator> MyVector;

//Main function. For parent process argc == 1, for child process argc == 2
int main(int argc, char *argv[])
{
    if(argc == 1){ //Parent process
        //Remove shared memory on construction and destruction
        struct shm_remove
        {
            shm_remove() { shared_memory_object::remove("MySharedMemory"); }
            ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
        } remover;

        //Create a new segment with given name and size
        managed_shared_memory segment(create_only, "MySharedMemory", 65536);

        //Initialize shared memory STL-compatible allocator
        const ShmemAllocator alloc_inst (segment.get_segment_manager());

        //Construct a vector named "MyVector" in shared memory with argument alloc_inst
        MyVector *myvector = segment.construct<MyVector>("MyVector")(alloc_inst);

        for(int i = 0; i < 100; ++i)  //Insert data in the vector
            myvector->push_back(i);

        //Launch child process
        std::string s(argv[0]); s += " child ";
        if(0 != std::system(s.c_str()))
            return 1;

        //Check child has destroyed the vector
        if(segment.find<MyVector>("MyVector").first)
            return 1;
    }
    else{ //Child process
        //Open the managed segment
        managed_shared_memory segment(open_only, "MySharedMemory");

        //Find the vector using the c-string name
        MyVector *myvector = segment.find<MyVector>("MyVector").first;

        //Use vector in reverse order
        std::sort(myvector->rbegin(), myvector->rend());

        //When done, destroy the vector from the segment
        segment.destroy<MyVector>("MyVector");
    }
    getchar();
    return 0;
};
bubuko.com,布布扣

 

boost::interprocess::managed_shared_memory(2)(std::deque),布布扣,bubuko.com

boost::interprocess::managed_shared_memory(2)(std::deque)

标签:des   c   style   class   blog   code   

原文地址:http://www.cnblogs.com/zzyoucan/p/3756272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!