Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
VUserTaskQueue.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// Class Description:
22// Abstract base class for creating a task queue used by
23// ThreadPool
24// ---------------------------------------------------------------
25// Author: Jonathan Madsen
26// ---------------------------------------------------------------
27
28#include "PTL/VUserTaskQueue.hh"
29#include "PTL/TaskRunManager.hh"
30#include "PTL/Utility.hh" // for PTL
31#include <cstdint> // for intmax_t
32#include <thread> // for thread
33
34using namespace PTL;
35
36//======================================================================================//
37
39: m_workers(nworkers)
40{
41 if(m_workers < 0)
42 {
44 m_workers = (rm) ? rm->GetNumberOfThreads() + 1 // number of threads + 1
45 : (2 * std::thread::hardware_concurrency()) + 1;
46 // hyperthreads + 1
47 }
48}
49
50//======================================================================================//
virtual int GetNumberOfThreads() const
static TaskRunManager * GetMasterRunManager(bool useTBB=false)
VUserTaskQueue(intmax_t nworkers=-1)