4eb962f025
[SVN r81976]
58 lines
1.9 KiB
C++
58 lines
1.9 KiB
C++
// Copyright (C) 2011 Tim Blechmann
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0. (See
|
|
// accompanying file LICENSE_1_0.txt or copy at
|
|
// http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
#include <cstdlib> //std::system
|
|
#include <sstream>
|
|
|
|
#include <boost/interprocess/managed_shared_memory.hpp>
|
|
#include <boost/lockfree/queue.hpp>
|
|
#include <boost/thread/thread.hpp>
|
|
|
|
using namespace boost::interprocess;
|
|
typedef allocator<int, managed_shared_memory::segment_manager> ShmemAllocator;
|
|
typedef boost::lockfree::queue<int,
|
|
boost::lockfree::allocator<ShmemAllocator>,
|
|
boost::lockfree::capacity<2048>
|
|
> queue;
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
if(argc == 1){
|
|
struct shm_remove
|
|
{
|
|
shm_remove() { shared_memory_object::remove("boost_queue_interprocess_test_shm"); }
|
|
~shm_remove(){ shared_memory_object::remove("boost_queue_interprocess_test_shm"); }
|
|
} remover;
|
|
|
|
managed_shared_memory segment(create_only, "boost_queue_interprocess_test_shm", 262144);
|
|
ShmemAllocator alloc_inst (segment.get_segment_manager());
|
|
|
|
queue * q = segment.construct<queue>("queue")(alloc_inst);
|
|
for (int i = 0; i != 1024; ++i)
|
|
q->push(i);
|
|
|
|
std::string s(argv[0]); s += " child ";
|
|
if(0 != std::system(s.c_str()))
|
|
return 1;
|
|
|
|
while (!q->empty())
|
|
boost::thread::yield();
|
|
return 0;
|
|
} else {
|
|
managed_shared_memory segment(open_only, "boost_queue_interprocess_test_shm");
|
|
queue * q = segment.find<queue>("queue").first;
|
|
|
|
int from_queue;
|
|
for (int i = 0; i != 1024; ++i) {
|
|
bool success = q->pop(from_queue);
|
|
assert (success);
|
|
assert (from_queue == i);
|
|
}
|
|
segment.destroy<queue>("queue");
|
|
}
|
|
return 0;
|
|
}
|