// 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 //std::system #include #include #include #include using namespace boost::interprocess; typedef allocator ShmemAllocator; typedef boost::lockfree::stack, boost::lockfree::capacity<2048> > stack; int main (int argc, char *argv[]) { if(argc == 1){ struct shm_remove { shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } } remover; managed_shared_memory segment(create_only, "MySharedMemory", 65536); ShmemAllocator alloc_inst (segment.get_segment_manager()); stack * queue = segment.construct("stack")(alloc_inst); for (int i = 0; i != 1024; ++i) queue->push(i); std::string s(argv[0]); s += " child "; if(0 != std::system(s.c_str())) return 1; while (!queue->empty()) boost::thread::yield(); return 0; } else { managed_shared_memory segment(open_only, "MySharedMemory"); stack * queue = segment.find("stack").first; int from_queue; for (int i = 0; i != 1024; ++i) { bool success = queue->pop(from_queue); assert (success); assert (from_queue == 1023 - i); } segment.destroy("stack"); } return 0; }