Параллельное программирование: нити

  1. Вычислить определенный интеграл от заданной функции, разбив отрезок интегрирования на n частей и запустив для каждой части отдельную нить. Для синхронизации использовать мьютексы.
  2. Та же задача, только для синхронизации использовать семафоры.
  3. Одна нить генерирует некоторую строку и передает ее второй нити. Вторая нить как-то обрабатывает сгенерированную строку и печатает обработанную строку. Придумать механизм синхронизации нитей с помощью семафоров и написать программу.
  4. Перемножить две квадратные n*n-матрицы, запустив k*k нитей, где k делит n. Нить с индексами (s,t) вычисляет минор матрицы-произведения в строках s*m+1, ..., s*m+m и столбцах t*m+1, ..., t*m+m, где m = n/k. (Результирующая матрица разбивается на клетки размера m = n/k, каждая нить вычисляет одну клетку.) Для синхронизации использовать мьютексы.
  5. Та же задача, только для синхронизации использовать семафоры.
  6. Разложить натуральное число на простые множители. Программа должна раскладывать число на 2 множителя одним из методов Полларда (Монте-Карло). Для каждого множителя затем запускается отдельная нить, пытающаяся его разложить дальше. Если это не удается, то множитель считается простым.