third_party/aten/contrib/data/threadpool/ThreadPool.cc
ThreadPool::ThreadPool(uint64_t threads) : stop(false) {

   // loop over all threads:
   for(uint64_t i = 0; i < threads; ++i) {
      workers.emplace_back(
         [this] {
            for(;;) {
               std::function<void()> task;
               {
                  std::unique_lock<std::mutex> lock(this->queue_mutex);
                  this->condition.wait(lock,
                     [this]{ return this->stop || !this->tasks.empty(); });
                  if(this->stop && this->tasks.empty())
                     return;
                  task = std::move(this->tasks.front());
                  this->tasks.pop();
               }
               task();
            }
         }
      );
   }
}
// constructor launches the specified number of workers:
constructor launches the specified number of workers.
constructor launches the specified number of workers .
ThreadPool::ThreadPool(uint64_t threads) : stop(false) {
   for(uint64_t i = 0; i < threads; ++i) {
      workers.emplace_back(
         [this] {
            for(;;) {
               std::function<void()> task;
               {
                  std::unique_lock<std::mutex> lock(this->queue_mutex);
                  this->condition.wait(lock,
                     [this]{ return this->stop || !this->tasks.empty(); });
                  if(this->stop && this->tasks.empty())
                     return;
                  task = std::move(this->tasks.front());
                  this->tasks.pop();
               }
               task();
            }
         }
      );
   }
}
ThreadPool :: ThreadPool ( uint64_t threads ) : stop ( false ) { for ( uint64_t i = 0 ; i < threads ; ++ i ) { workers . emplace_back ( [ this ] { for ( ; ; ) { std :: function < void ( ) > task ; { std :: unique_lock < std :: mutex > lock ( this -> queue_mutex ) ; this -> condition . wait ( lock , [ this ] { return this -> stop || ! this -> tasks . empty ( ) ; } ) ; if ( this -> stop && this -> tasks . empty ( ) ) return ; task = std :: move ( this -> tasks . front ( ) ) ; this -> tasks . pop ( ) ; } task ( ) ; } } ) ; } }
constructor launches the specified number of workers:
constructor launches the specified number of workers :
// loop over all threads: