printSTL

printРаспараллеливание программ

Классы и функции, необходимые для распараллеливания программ, описаны в заголовочном файле <thread>. Кроме того, для распараллеливания вычислений, не требующих синхронизации и блокировок, можно использовать набор атомарных операций и типов, описанный в <atomic>
mutex m;
void input(string msg, int &n)
{ lock_guard<mutex> lm(m); // блокировка выполнения функции в других потоках
  cout<<msg;
  cin>>n;
}
void f(string t) // функция, которая будет выполняться параллельно
{ int n;
  input(t+" thread:",n);
  for(int i=0;i<n;++i)
    this_thread::sleep_for(100ms); // задержка 100мс
  cout<<t<<" thread finished\n";
}
int main()
{ thread t1(f, string("First")); // запуск потоков управления
  thread t2(f, string("Second")); 
  t1.join(); // ожидание завершения
  t2.join();
}
Для обработки данных большого объема в C++17 добавлены параллельные версии для многих стандартных алгоритмов. В качестве первого аргумента при вызове указывается режим выполнения execution::par (возможна разделение данных на части и их параллельная обработка) или execution::par_unseq (возможна векторизация, т.е. одновременная обработка групп данных), по умолчанию применяется режим execution::seq (без распараллеливания).
loading