2. Паралельні потоки C++11

C++11 — чинна версія стандарту мови C++, прийнята у серпні 2011 комітетом ISO зі стандартизації мови замість ISO/IEC 14882:2003 (С++03). Новий стандарт включає доповнення в ядрі мови та розширення STL, включаючи велику частину TR1 — окрім, можливо, бібліотеки спеціальних математичних функцій.

Робота з паралельними потоками реалізована в стандартній бібліотеці <thread>. Для створення потоків необхідно використовувати клас std::thread, який може їх створювати на базі регулярних функцій, lambda-виразів або функторів.

Макет програми:

#include <thread> 
void threadFunction() 

   // do smth 

int main() 

   std::thread thr(threadFunction); 
   thr.join(); 
   return 0; 
}

ЗАВДАННЯ

Задача 1. Робота з декількома джерелами даних

Розробити програму, яка використовуючи потоки C++11 буде паралельно зчитувати дані із заданого переліку джерел даних та обчислювати їх кількісні характеристики. Для цього необхідно заздалегідь підготувати файли з текстовою та чисельною інформацію. Потоки, що оброблюють текстові файли повинні обчислити статистику цих файлів (кількість символів, слів, знаків пунктуації, абзаців тощо). Потоки, що оброблюють числову інформацію відповідні статистичні дані для числових рядів (середнє, максимальне та мінімальне значення, кількість додатних і від'ємних чисел тощо). Кожен потік після завершення роботи повинен опублікувати на екрані повідомлення з обчисленною інформацією.

Задача 2. Робота зі спільною областю пам'яті

Розробити програму, яка використовуючи два паралельні потоки зчитає збережені у файли дві матриці. Після завантаження матриць у пам'ять комп'ютера необхідно знайти їх матричний добуток з використанням заданої користувачем кількості потоків.