CMS 3D CMS Logo

WaitingTaskList.h
Go to the documentation of this file.
1 #ifndef FWCore_Concurrency_WaitingTaskList_h
2 #define FWCore_Concurrency_WaitingTaskList_h
3 // -*- C++ -*-
4 //
5 // Package: Concurrency
6 // Class : WaitingTaskList
7 //
67 //
68 // Original Author: Chris Jones
69 // Created: Thu Feb 21 13:46:31 CST 2013
70 // $Id$
71 //
72 
73 // system include files
74 #include <atomic>
75 
76 // user include files
80 
81 // forward declarations
82 
83 namespace edm {
85  public:
87 
91  explicit WaitingTaskList(unsigned int iInitialSize = 2);
92  WaitingTaskList(const WaitingTaskList&) = delete; // stop default
93  const WaitingTaskList& operator=(const WaitingTaskList&) = delete; // stop default
94  ~WaitingTaskList() = default;
95 
96  // ---------- member functions ---------------------------
97 
103  void presetTaskAsFailed(std::exception_ptr iExcept);
104 
106 
111  void add(tbb::task_group*, WaitingTask*);
112 
114 
116  void add(WaitingTaskHolder);
117 
119 
125  void doneWaiting(std::exception_ptr iPtr);
126 
128 
133  void reset();
134 
135  private:
139  void announce();
140 
141  struct WaitNode {
143  tbb::task_group* m_group;
144  std::atomic<WaitNode*> m_next;
146 
147  void setNextNode(WaitNode* iNext) { m_next = iNext; }
148 
149  WaitNode* nextNode() const { return m_next; }
150  };
151 
152  WaitNode* createNode(tbb::task_group* iGroup, WaitingTask* iTask);
153 
154  // ---------- member data --------------------------------
155  std::atomic<WaitNode*> m_head;
156  std::unique_ptr<WaitNode[]> m_nodeCache;
158  unsigned int m_nodeCacheSize;
159  std::atomic<unsigned int> m_lastAssignedCacheIndex;
160  std::atomic<bool> m_waiting;
161  };
162 } // namespace edm
163 
164 #endif
edm::WaitingTaskList::m_head
std::atomic< WaitNode * > m_head
Definition: WaitingTaskList.h:155
WaitingTaskHolder.h
edm
HLT enums.
Definition: AlignableModifier.h:19
edm::WaitingTaskList::m_nodeCache
std::unique_ptr< WaitNode[]> m_nodeCache
Definition: WaitingTaskList.h:156
edm::WaitingTaskList::m_waiting
std::atomic< bool > m_waiting
Definition: WaitingTaskList.h:160
edm::WaitingTaskList::m_lastAssignedCacheIndex
std::atomic< unsigned int > m_lastAssignedCacheIndex
Definition: WaitingTaskList.h:159
edm::WaitingTaskList::WaitNode::m_next
std::atomic< WaitNode * > m_next
Definition: WaitingTaskList.h:144
edm::WaitingTaskList::WaitNode::m_group
tbb::task_group * m_group
Definition: WaitingTaskList.h:143
edm::WaitingTaskList::reset
void reset()
Resets access to the resource so that added tasks will wait.
Definition: WaitingTaskList.cc:53
edm::WaitingTaskList
Definition: WaitingTaskList.h:84
edm::WaitingTaskList::presetTaskAsFailed
void presetTaskAsFailed(std::exception_ptr iExcept)
Definition: WaitingTaskList.cc:163
edm::WaitingTaskList::WaitNode::m_fromCache
bool m_fromCache
Definition: WaitingTaskList.h:145
edm::WaitingTaskList::doneWaiting
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
Definition: WaitingTaskList.cc:212
edm::WaitingTaskList::WaitNode::nextNode
WaitNode * nextNode() const
Definition: WaitingTaskList.h:149
edm::WaitingTaskList::~WaitingTaskList
~WaitingTaskList()=default
edm::WaitingTaskHolder
Definition: WaitingTaskHolder.h:32
thread_safety_macros.h
edm::WaitingTaskList::WaitNode::m_task
WaitingTask * m_task
Definition: WaitingTaskList.h:142
edm::WaitingTaskList::m_nodeCacheSize
unsigned int m_nodeCacheSize
Definition: WaitingTaskList.h:158
edm::WaitingTaskList::announce
void announce()
Definition: WaitingTaskList.cc:177
WaitingTask.h
edm::WaitingTaskList::add
void add(tbb::task_group *, WaitingTask *)
Adds task to the waiting list.
Definition: WaitingTaskList.cc:125
edm::WaitingTask
Definition: WaitingTask.h:36
edm::WaitingTaskList::WaitNode
Definition: WaitingTaskList.h:141
edm::WaitingTaskList::WaitingTaskList
WaitingTaskList(unsigned int iInitialSize=2)
Constructor.
Definition: WaitingTaskList.cc:38
edm::WaitingTaskList::createNode
WaitNode * createNode(tbb::task_group *iGroup, WaitingTask *iTask)
Definition: WaitingTaskList.cc:72
edm::WaitingTaskList::m_exceptionPtr
std::exception_ptr m_exceptionPtr
Definition: WaitingTaskList.h:157
edm::WaitingTaskList::WaitNode::setNextNode
void setNextNode(WaitNode *iNext)
Definition: WaitingTaskList.h:147
edm::WaitingTaskList::operator=
const WaitingTaskList & operator=(const WaitingTaskList &)=delete
CMS_THREAD_GUARD
#define CMS_THREAD_GUARD(_var_)
Definition: thread_safety_macros.h:6