Geant4-11
ThreadData.cc
Go to the documentation of this file.
1//
2// MIT License
3// Copyright (c) 2020 Jonathan R. Madsen
4// Permission is hereby granted, free of charge, to any person obtaining a copy
5// of this software and associated documentation files (the "Software"), to deal
6// in the Software without restriction, including without limitation the rights
7// to use, copy, modify, merge, publish, distribute, sublicense, and
8// copies of the Software, and to permit persons to whom the Software is
9// furnished to do so, subject to the following conditions:
10// The above copyright notice and this permission notice shall be included in
11// all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED
12// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
13// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
15// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
16// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
17// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18//
19// ---------------------------------------------------------------
20// Tasking class implementation
21//
22
23#include "PTL/ThreadData.hh"
24#include "PTL/ThreadPool.hh"
25#include "PTL/Threading.hh"
26#include "PTL/VUserTaskQueue.hh"
27
28#include <iostream>
29
30using namespace PTL;
31
32//======================================================================================//
33
36{
37 static thread_local ThreadData* _instance = nullptr;
38 return _instance;
39}
40
41//======================================================================================//
42
44: is_main((tp) ? tp->is_main() : false)
45, thread_pool(tp)
46, current_queue((tp) ? tp->get_queue() : nullptr)
47, queue_stack({ current_queue })
48{}
49
50//======================================================================================//
51
52void
54{
55 if(!thread_pool)
56 return;
58 queue_stack.push_back(current_queue);
59}
60
61//======================================================================================//
ThreadData(ThreadPool *tp)
Definition: ThreadData.cc:43
VUserTaskQueue * current_queue
Definition: ThreadData.hh:148
TaskStack< VUserTaskQueue * > queue_stack
Definition: ThreadData.hh:149
ThreadPool * thread_pool
Definition: ThreadData.hh:147
task_queue_t * get_queue() const
Definition: ThreadPool.hh:127
std::map< G4String, G4AttDef > * GetInstance(const G4String &storeKey, G4bool &isNew)
Definition: AutoLock.hh:254