Распараллеливание программ
Классы и функции, необходимые для распараллеливания программ, описаны в заголовочном файле <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); //
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 (без распараллеливания).