]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/lockfree/test/stack_interprocess_test.cpp
1 // Copyright (C) 2011 Tim Blechmann
3 // Distributed under the Boost Software License, Version 1.0. (See
4 // accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
7 #include <cstdlib> //std::system
10 #include <boost/interprocess/managed_shared_memory.hpp>
11 #include <boost/lockfree/stack.hpp>
12 #include <boost/thread/thread.hpp>
14 using namespace boost::interprocess
;
15 typedef allocator
<int, managed_shared_memory::segment_manager
> ShmemAllocator
;
16 typedef boost::lockfree::stack
<int,
17 boost::lockfree::allocator
<ShmemAllocator
>,
18 boost::lockfree::capacity
<2048>
21 int main (int argc
, char *argv
[])
26 shm_remove() { shared_memory_object::remove("MySharedMemory"); }
27 ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
30 managed_shared_memory
segment(create_only
, "MySharedMemory", 65536);
31 ShmemAllocator
alloc_inst (segment
.get_segment_manager());
33 stack
* queue
= segment
.construct
<stack
>("stack")(alloc_inst
);
34 for (int i
= 0; i
!= 1024; ++i
)
37 std::string
s(argv
[0]); s
+= " child ";
38 if(0 != std::system(s
.c_str()))
41 while (!queue
->empty())
42 boost::thread::yield();
45 managed_shared_memory
segment(open_only
, "MySharedMemory");
46 stack
* queue
= segment
.find
<stack
>("stack").first
;
49 for (int i
= 0; i
!= 1024; ++i
) {
50 bool success
= queue
->pop(from_queue
);
52 assert (from_queue
== 1023 - i
);
54 segment
.destroy
<stack
>("stack");