Главная Операционные системы » Файлы » Лекции » Операционные системы [ Добавить материал ]

Потоки управления - презентация

[Скачать с сервера (170.6 Kb) - бесплатно] 14.11.2009, 18:09
  • Назначение и свойства потоков управления
  • Основные операции над потоками
  • Способы реализации потоков
  • Работа с потоками управления в ОС Windows
  • Работа с потоками управления в ОС Unix
  • Потоковая безопасность

Фрагменты из лекции

Назначение потоков управления

  • Мультипроцессные системы с разделением времени позволили одновременное (параллельное) выполнение нескольких программ.
  • Каждый процесс имеет собственное, защищенное от вмешательства других адресное пространство — собственные данные.
  • Нередко требуется параллельная работа нескольких участков кода с общими данными

Поток управления

  • Поток управления (нить, thread) — это элемент процесса, который может выполняться на центральном процессоре.
  • Процесс начинает свою работу с одного (главного) потока, но может создавать дополнительные.
  • Процесс завершает свое выполнение после завершения работы главного потока (независимо от работы дополнительных потоков)

Поток управления

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

Процесс и потоки

Все потоки процесса разделяют общие:
  • адресное пространство;
  • таблицу открытых файлов;
  • глобальные и статические переменные;
  • другие ресурсы процесса.
Каждый поток имеет отдельные:
  • стек;
  • точку выполнения;
  • значения локальных переменных.

Основные операции над потоками

  • Создание потока
    • запуск потоковой функции;
    • передача аргументов в потоковую функцию.
  • Завершение работы потока
    • при завершении потоковой функции;
    • по инициативе завершаемого потока;
    • по инициативе другого потока.
  • Получение возвращенного потоком значения

Способы реализации потоков

1. В ядре системы (ОС Windows)
– преимущества:
  • планировщик процессора знает о наличии потоков и может учитывать их при планировании процессорного времени;
  • блокировка отдельного потока не оказывает влияния на другие потоки процесса.
– недостатки:
  • на переход в режим ядра и обратно при выполнении операций над потоками требуется время;
  • введение потоков нередко значительно снижает стабильность ядра ОС.
2. На уровне пользовательских функций (большинство версий Unix)
– преимущества:
  • операции над потоками выполняются быстрее;
  • не требуют модификации ядра ОС, оно остается простым и, как следствие, стабильным.
– недостатки:
  • блокировка одного потока может заблокировать весь процесс, т.к. планировщик процессора не знает о наличии в нем других потоков;
  • время процессора делится поровну между процессами без учета количества потоков в них.

Работа с потоками управления ОС Windows

  • Основные операции над потоками:
    • создание — CreateThread
    • завершение работы — ExitThread, TerminateThread
    • получения кода завершения потока - GetExitCodeThread
Создание потока
– HANDLE — дескриптор созданного потока

● CreateThread(
– LPSECURITY_ATTRIBUTES — атрибуты безопасности, обычно NULL,
– SIZE_T - начальный размер стека, 0 — размер по умолчанию,
– LPTHREAD_START_ROUTINE — потоковая функция,
– LPVOID — параметр, передаваемый в потоковую функцию,
– DWORD — флаги, CREATE_SUSPENDED чтобы поток не начинал выполнение сразу (впоследствии он запускается через ResumeThread),
– LPDWORD — адрес для получения идентификатора потока, NULL если не нужно
)

Завершение работы потока
– void - функция не возвращается

● ExitThread(
– DWORD — код завершения потока
)

– BOOL — 0 если неудачно, иначе не 0

● TerminateThread(
– HANDLE — дескриптор завершаемого потока,
– DWORD — код завершения потока
)

Потоки в ОС Unix

  • Концепция потоков появилась позднее создания базового ядра Unix, поэтому реализация потоков в различных версиях ОС различалась.
  • При разработке стандарта POSIX были разработаны POSIX-потоки (pthread), поддерживаемые большинством современных unix-систем.
  • При компиляции программы с использованием POSIX-потоков необходимо указать ключ - lpthread

Потоковая безопасность

  • Функция называется потоково-безопасносной (thread safe), если (псевдо)параллельное выполнение этой функции в нескольких потоках не может нарушить работу программы.
  • Функция является потоково-безопасной, если
    • она использует только локальные переменные, и указатели только на выделенную ею память;
    • если работа с глобальнами и статическими переменными, а также получаемыми указателями, синхронизирована;
    • функция может не допускать одновременных запусков, блокируя свою работу с помощью критической секции или мьютекса.

Части CRT, не являющиеся потоково-безопасными

  • Библиотека CRT создавалась задолго до появления концепции потоков, поэтому не является потоково-безопасной.
  • Небезопасной при многопоточной работе является обработка ошибок, поскольку она использует глобальную переменную errno
  • Небезопасной при многопоточной работе является, например, функция strtok, т.к. для хранения состояния между запусками она использует статические переменные.
Похожие материалы:

Добавил: COBA (14.11.2009) | Категория: Операционные системы
Просмотров: 6643 | Загрузок: 1531 | Рейтинг: 0.0/0 |
Теги: windows, unix, потоки, программирование, CRT, ОСи, C++
Комментарии (0)

Имя *:
Email *:
Код *: