Цели и задачи дисциплины
Целью дисциплины является ознакомление студентов с основами многопоточного
программирования. В задачи входит изучение принципов и освоение на практике
инструментов многопоточного программирования.
Краткое содержание дисциплины
Процессы и нити с точки зрения операционной системы. Достоинства и недостатки
использования нитей. Модели параллельного программирования: автономные
процессы, IPC, процессы с общей памятью, многопоточные программы, событийно-
ориентированные. Ускорение, закон Амдала, следствия из него, закон Густафсона.
Модели реализации многопоточности: зелёные нити, cистемные нити, гибридные
нити. Жизненный цикл нити. Многопоточное программирование с использованием
fork() и IPC (signal, pipe, socket, message queue, shared memory, message passing).
Синхронизация. Программные способы решения проблемы критической секции:
алгоритм Деккера, алгоритм Петерсона, алгоритм Eisenberg & McGuire, алгоритм
Лэм-порта и булочной. Аппаратные способы решения проблемы критической
секции. Семафоры, мониторы, мьютексы, условные переменные и их реализация.
Многопоточное программирование с помощью Pthreads. Отладка. Ошибки типа
deadlock, livelock, starvation и алгоритмы их обнаружения. Отладка многопоточных
программ. Многопоточное программирование с помощью OpenMP.