doc_offset_ptr.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. #include <boost/interprocess/detail/workaround.hpp>
  12. //[doc_offset_ptr
  13. #include <boost/interprocess/managed_shared_memory.hpp>
  14. #include <boost/interprocess/offset_ptr.hpp>
  15. //<-
  16. #include "../test/get_process_id_name.hpp"
  17. //->
  18. using namespace boost::interprocess;
  19. //Shared memory linked list node
  20. struct list_node
  21. {
  22. offset_ptr<list_node> next;
  23. int value;
  24. };
  25. int main ()
  26. {
  27. //Remove shared memory on construction and destruction
  28. struct shm_remove
  29. {
  30. //<-
  31. #if 1
  32. shm_remove() { shared_memory_object::remove(test::get_process_id_name()); }
  33. ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); }
  34. #else
  35. //->
  36. shm_remove() { shared_memory_object::remove("MySharedMemory"); }
  37. ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
  38. //<-
  39. #endif
  40. //->
  41. } remover;
  42. //<-
  43. (void)remover;
  44. //->
  45. //Create shared memory
  46. //<-
  47. #if 1
  48. managed_shared_memory segment(create_only,
  49. test::get_process_id_name(), //segment name
  50. 65536);
  51. #else
  52. //->
  53. managed_shared_memory segment(create_only,
  54. "MySharedMemory", //segment name
  55. 65536);
  56. //<-
  57. #endif
  58. //->
  59. //Create linked list with 10 nodes in shared memory
  60. offset_ptr<list_node> prev = 0, current, first;
  61. int i;
  62. for(i = 0; i < 10; ++i, prev = current){
  63. current = static_cast<list_node*>(segment.allocate(sizeof(list_node)));
  64. current->value = i;
  65. current->next = 0;
  66. if(!prev)
  67. first = current;
  68. else
  69. prev->next = current;
  70. }
  71. //Communicate list to other processes
  72. //. . .
  73. //When done, destroy list
  74. for(current = first; current; /**/){
  75. prev = current;
  76. current = current->next;
  77. segment.deallocate(prev.get());
  78. }
  79. return 0;
  80. }
  81. //]
  82. #include <boost/interprocess/detail/config_end.hpp>