comp_doc_anonymous_semaphoreB.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // (C) Copyright Ion Gaztanaga 2006-2012. Distributed under the Boost
  4. // Software License, Version 1.0. (See accompanying file
  5. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // See http://www.boost.org/libs/interprocess for documentation.
  8. //
  9. //////////////////////////////////////////////////////////////////////////////
  10. #include <boost/interprocess/detail/config_begin.hpp>
  11. //[doc_anonymous_semaphoreB
  12. #include <boost/interprocess/shared_memory_object.hpp>
  13. #include <boost/interprocess/mapped_region.hpp>
  14. #include <iostream>
  15. #include "doc_anonymous_semaphore_shared_data.hpp"
  16. using namespace boost::interprocess;
  17. int main ()
  18. {
  19. //Remove shared memory on destruction
  20. struct shm_remove
  21. {
  22. ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
  23. } remover;
  24. //<-
  25. (void)remover;
  26. //->
  27. //Create a shared memory object.
  28. shared_memory_object shm
  29. (open_only //only create
  30. ,"MySharedMemory" //name
  31. ,read_write //read-write mode
  32. );
  33. //Map the whole shared memory in this process
  34. mapped_region region
  35. (shm //What to map
  36. ,read_write //Map it as read-write
  37. );
  38. //Get the address of the mapped region
  39. void * addr = region.get_address();
  40. //Obtain the shared structure
  41. shared_memory_buffer * data = static_cast<shared_memory_buffer*>(addr);
  42. const int NumMsg = 100;
  43. int extracted_data [NumMsg];
  44. //<-
  45. (void)extracted_data;
  46. //->
  47. //Extract the data
  48. for(int i = 0; i < NumMsg; ++i){
  49. data->nstored.wait();
  50. data->mutex.wait();
  51. extracted_data[i] = data->items[i % shared_memory_buffer::NumItems];
  52. data->mutex.post();
  53. data->nempty.post();
  54. }
  55. return 0;
  56. }
  57. //]
  58. #include <boost/interprocess/detail/config_end.hpp>