31 if (stats !=
nullptr) {
50 return tbb::is_current_task_group_canceling();
69 if (num_threads > 0) {
71 LOG_INFO <<
"Overriding number of TBB threads to " << num_threads <<
".";
72 global_control = make_unique<tbb::global_control>(tbb::global_control::max_allowed_parallelism,
86 global_control.reset();
131 queue.emplace_front(std::move(run));
134 queue.emplace_back(std::move(run));
196 task =
queue.front();
224 const int done =
queue.size();
thread_condition_variable num_cond
void num_decrease(const int done)
unique_ptr< thread > worker_thread
void push(TaskRunFunction &&run, bool front=false)
thread_condition_variable queue_cond
list< TaskRunFunction > queue
bool thread_wait_pop(TaskRunFunction &task)
static void free_memory()
static thread_mutex mutex
static int active_num_threads
static int max_concurrency()
static void init(const int num_threads=0)
#define CCL_NAMESPACE_END
#define assert(assertion)
CCL_NAMESPACE_BEGIN string string_printf(const char *format,...)
string full_report() const
void push(TaskRunFunction &&task)
tbb::task_group tbb_group
void wait_work(Summary *stats=nullptr)
std::function< void()> TaskRunFunction
std::unique_lock< std::mutex > thread_scoped_lock
CCL_NAMESPACE_BEGIN double time_dt()