Exemple #1
0
 exit_code becomeTaskThread( task_mask* mask )
 {
     if( isInitTaskSystem() )
     {
         task_thread_data data;
         data.queue = global_task_queue;
         data.mask = mask;
         
         return taskThread( ( void* )( &data ) );
     }
     else
         throw exception( "becomeTaskThread(): Task system not initialized" );
 }
void execute(int const numberOfThreads) {
  auto const n = 1000000000;
  auto const delta = 1.0 / n;
  auto const startTime = std::chrono::steady_clock::now();
  auto const sliceSize = n / numberOfThreads;
  std::packaged_task<double()> tasks[numberOfThreads];
  for (auto i = 0; i < numberOfThreads; ++i) {
    tasks[i] = std::packaged_task<double()>(std::bind(partialSum, i, sliceSize, delta));
    std::thread taskThread(std::ref(tasks[i]));
    taskThread.detach();
  }
  auto sum = 0.0;
  for (auto && task: tasks) { sum += task.get_future().get(); }
  auto const pi = 4.0 * delta * sum;
  auto const elapseTime = std::chrono::steady_clock::now() - startTime;
  out("Futures Thread AW", pi, n, elapseTime, numberOfThreads, std::thread::hardware_concurrency());
}