FairMQ  1.3.9
C++ Message Passing Framework
Manager.h
1 /********************************************************************************
2  * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
15 #ifndef FAIR_MQ_SHMEM_MANAGER_H_
16 #define FAIR_MQ_SHMEM_MANAGER_H_
17 
18 #include <fairmq/Tools.h>
19 #include <fairmq/shmem/Region.h>
20 #include <fairmq/shmem/Common.h>
21 
22 #include "FairMQLogger.h"
23 #include "FairMQMessage.h"
24 
25 #include <boost/interprocess/managed_shared_memory.hpp>
26 #include <boost/interprocess/ipc/message_queue.hpp>
27 
28 #include <string>
29 #include <unordered_map>
30 
31 namespace fair
32 {
33 namespace mq
34 {
35 namespace shmem
36 {
37 
38 class Manager
39 {
40  friend struct Region;
41 
42  public:
43  Manager(const std::string& name, size_t size);
44 
45  Manager() = delete;
46 
47  Manager(const Manager&) = delete;
48  Manager operator=(const Manager&) = delete;
49 
50  boost::interprocess::managed_shared_memory& Segment();
51 
52  static void Interrupt();
53  static void Resume();
54 
55  boost::interprocess::mapped_region* CreateRegion(const size_t size, const uint64_t id, FairMQRegionCallback callback);
56  Region* GetRemoteRegion(const uint64_t id);
57  void RemoveRegion(const uint64_t id);
58 
59  void RemoveSegment();
60 
61  boost::interprocess::managed_shared_memory& ManagementSegment();
62 
63  private:
64  std::string fSessionName;
65  std::string fSegmentName;
66  std::string fManagementSegmentName;
67  boost::interprocess::managed_shared_memory fSegment;
68  boost::interprocess::managed_shared_memory fManagementSegment;
69  static std::unordered_map<uint64_t, Region> fRegions;
70 };
71 
72 } // namespace shmem
73 } // namespace mq
74 } // namespace fair
75 
76 #endif /* FAIR_MQ_SHMEM_MANAGER_H_ */
Definition: Manager.h:38
Definition: Region.h:38
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23

privacy