Копия содержимого сайта dlenev.nm.ru (сейчас не доступен)

с/к Многонитевое программирование

Семестровый спецкурс "Многонитевое программирование" ориентирован на студентов 3-5 курсов факультета ВМиК. От студентов требуется хорошее знание ОС Unix (процессы и межпроцессное взаимодействие) и способность понимать программы на С и C++.

Спецкурс посвящён изложению основных понятий и способов разработки программ с использованием механизма нитей (легковесных процессов) Кроме того спецкурс знакомит с основными подходами и проблемами многонитевого программирования.

Когда ? Где ?

Спецкурс проходид по пятницам в 16:20 в аудитории 653 второго учебного корпуса МГУ.

Экзамен

Экзамен будет проходить в два этапа: письменный экзамен состоится 22 мая в 10:00 в аудитории 73, простановка оценок, а также общение с желающими улучшить свои оценки состоится 23 мая в 16:20 в аудитории 73.

Просьба иметь с собой ведомость.

План спецкурса.

  1. Введение. Эволюция ОС, понятие нити. Преимущества многонитевого программирования. Различные API нитей и походы к многонитевомупрограм-мированию. Стандарт POSIX.
  2. Нить и ее жизненный цикл.
  3. Проблемы при параллельном доступе к общей памяти. Понятие о взаимоисключении и критических секциях. Связь инвариантов и критических секций. Ожидание событий, условные переменные, связь условных переменных и предикатов. Размер mutex и понятие о тупиках. Проблема читателей-писателей. Модель консистентности памяти.
  4. Многонитевое программирование и библиотеки. Данные, специфич-ные для нити.
  5. Прерывание выполнения нити (Cancellation).
  6. Поддержка работы в реальном времени и связанные с этим проблемы.
  7. Типичные структуры при использовании нитей. Конструкции и про-блемы, характерные для использовании нитей в C++. Отладка многонитевых программ.
  8. Подходы к реализации API нитей. Конкретные подходы, используемые при программировании нитей в ОС Solaris и Linux. Реализация нитей в библиотеке StateThreads (SGI).

Литература.

С литературой есть некоторые проблемы. Собственно о многонитевом программировании на русском книг нет (Если я не прав, то поправьте меня!). Поэтому из широкодоступного могу порекомендовать только:

  • Теренс Чан. Системное программирование на C++ для Unix.

В этой книжке есть глава которая называется "Многопотоковое программирование" (потоки - это другой вариант перевода на русский язык английского термина thread). Конечно тема там освещена достаточно поверхностно, но основное там есть и с этого можно начинать.

Если же говорить об англоязычной литературе, то в первую очередь нужно отметить классическую книгу:

  • David R. Butenhof. Programming with POSIX Threads.

Данный спецкурс во многом построен именно на материале этой книги. По моему мнению в этой книге можно найти практически все что касается многонитевого программирования.

Плюс есть еще достаточно много книг по этой теме, которых я не читал и поэтому ничего определенного по их поводу сказать не могу (посмотрите, например, на www.amazon.com). Могу только заметить, что есть достаточно хорошая книга которая больше рассказывает о том "что у нее внутре" (а внутре у нее как известно неонка :-) ):

  • Bil Lewis. Daniel J. Berg. Threads primer.

Материалы лекций :

  1. Введение.
  2. Нить и ее жизненный цикл. Пример простого многонитевого приложения.
  3. Синхронизация (часть 1).
  4. Синхронизация (часть 2).
  5. Многонитевое программирование и библиотеки. Данные специфичные для нити.
  6. Прерывание выполнения нити (Cancellation).
  7. Поддержка работы в реальном времени и связанные с этим проблемы.

Если есть какие то вопросы или замечания - напишите мне!