小编upp*_*ppi的帖子

在共享内存中使用boost :: lockfree :: queue时出现问题(boost 1.53,gcc 4.7.2/clang 3.0-6ubuntu3)

我在放入boost::lockfree::queue<<T, fixed_sized<false>, ..> 共享内存时遇到问题.我需要它,因为我必须能够将超过65535条消息插入队列,并且fixed_sized队列限制为65535.
以下代码正常工作(但capacity<...>选项暗示fixed_sized<true>):

typedef boost::interprocess::allocator<
    MessageT, 
    boost::interprocess::managed_shared_memory::segment_manager>
        ShmemAllocator;
typedef boost::lockfree::queue<
    MessageT,
    boost::lockfree::capacity<65535>,
    boost::lockfree::allocator<ShmemAllocator> >
        Queue;
m_segment = new boost::interprocess::managed_shared_memory(
    boost::interprocess::create_only, segmentName, size);
Queue* m_queue = m_segment->construct<Queue>(
    queueName)(
    m_segment->get_segment_manager());
...
m_queue->bounded_push(message);
Run Code Online (Sandbox Code Playgroud)

以下代码也正常工作(但它不使用共享内存):

boost::lockfree::queue<MessageT> q;
....
q.bounded_push(message);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将它结合起来时:

typedef boost::interprocess::allocator<
    MessageT, 
    boost::interprocess::managed_shared_memory::segment_manager>
        ShmemAllocator;
typedef boost::lockfree::queue<
    MessageT,
    boost::lockfree::allocator<ShmemAllocator> >
        Queue;
m_segment = new boost::interprocess::managed_shared_memory(
    boost::interprocess::create_only, segmentName, size);
Queue* m_queue = m_segment->construct<Queue>(
    queueName)(
    m_segment->get_segment_manager());
...
m_queue->bounded_push(message);
Run Code Online (Sandbox Code Playgroud)

它无法使用以下日志进行编译:

In file included from src/model/Queue.h:16:

In file included from /home/uppi/lib/include/boost/lockfree/queue.hpp:24: …
Run Code Online (Sandbox Code Playgroud)

c++ boost shared-memory lock-free interprocess

9
推荐指数
1
解决办法
3521
查看次数

标签 统计

boost ×1

c++ ×1

interprocess ×1

lock-free ×1

shared-memory ×1