12 size_t num_threads = thread::hardware_concurrency();
34 lock_guard<mutex> lock(
mutex_);
38 for(
size_t ithread = 0; ithread <
Size(); ++ithread){
39 if(
threads_.at(ithread)->joinable()){
50 size_t old_num_threads =
Size();
51 if(num_threads > old_num_threads){
55 for(
size_t ithread = old_num_threads; ithread < num_threads; ++ithread){
58 }
else if(num_threads < old_num_threads){
59 for(
size_t ithread = num_threads; ithread < old_num_threads; ++ithread){
65 lock_guard<mutex> lock(
mutex_);
75 unique_ptr<function<void()> > task =
tasks_.
Pop();
77 while(task !=
nullptr){
83 unique_lock<mutex> lock(
mutex_);
85 if(task ==
nullptr)
return;
99 lock_guard<mutex> lock(
mutex_);
100 queue_.push(unique_ptr<
function<
void()> >());
101 queue_.back() = move(func);
105 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_