14 TThread::Initialize();
15 size_t num_threads = thread::hardware_concurrency();
31 TThread::Initialize();
38 lock_guard<mutex> lock(
mutex_);
42 for(
size_t ithread = 0; ithread <
Size(); ++ithread){
43 if(
threads_.at(ithread)->joinable()){
54 size_t old_num_threads =
Size();
55 if(num_threads > old_num_threads){
59 for(
size_t ithread = old_num_threads; ithread < num_threads; ++ithread){
62 }
else if(num_threads < old_num_threads){
63 for(
size_t ithread = num_threads; ithread < old_num_threads; ++ithread){
69 lock_guard<mutex> lock(
mutex_);
79 unique_ptr<function<void()> > task =
tasks_.
Pop();
81 while(task !=
nullptr){
87 unique_lock<mutex> lock(
mutex_);
89 if(task ==
nullptr)
return;
103 lock_guard<mutex> lock(
mutex_);
104 queue_.push(unique_ptr<
function<
void()> >());
105 queue_.back() = move(func);
109 lock_guard<mutex> lock(
mutex_);
std::atomic< bool > stop_at_empty_
void DoTasksFromQueue(size_t ithread)
std::vector< std::shared_ptr< std::atomic< bool > > > stop_thread_now_
bool ReadyToAct(size_t ithread, std::unique_ptr< std::function< void()> > &task)
std::vector< std::unique_ptr< std::thread > > threads_
void Resize(size_t num_threads)
std::unique_ptr< std::function< void()> > FuncPtr
std::condition_variable cv_