Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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/VUserTaskQueue.hh"
26
27using namespace PTL;
28
29//======================================================================================//
30
33{
34 static thread_local ThreadData* _instance = nullptr;
35 return _instance;
36}
37
38//======================================================================================//
39
41: is_main((tp) ? tp->is_main() : false)
42, thread_pool(tp)
43, current_queue((tp) ? tp->get_queue() : nullptr)
44, queue_stack({ current_queue })
45{}
46
47//======================================================================================//
48
49void
51{
52 if(!thread_pool)
53 return;
55 queue_stack.push_back(current_queue);
56}
57
58//======================================================================================//
static ThreadData *& GetInstance()
Definition ThreadData.cc:32
ThreadData(ThreadPool *tp)
Definition ThreadData.cc:40
VUserTaskQueue * current_queue
TaskStack< VUserTaskQueue * > queue_stack
ThreadPool * thread_pool
task_queue_t * get_queue() const