Среда, 08.02.2012, 10:13
Приветствую Вас Гость

Сайт факультета ЭВТ ВолгГТУ

Меню сайта
Форма входа
Логин:
Пароль:

Войдите, чтобы не видеть рекламу
Категории раздела
Дополнительно
Реклама


фото родов
Это интересно...

Сисадмин мнил себя богом сети, однако электрик грубо развеял этот миф ...

Поиск
Наш опрос
Сколько в среднем часов в сутки вы спите во время учёбы (сессия не в счёт) ?
Всего ответов: 332
Статистика

Онлайн всего: 15
Ныкаются: 14
Пользователей: 1
alexey78953
Главная » Файлы » Лекции » Операционные системы [ Добавить материал ]

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

[ Скачать с сервера (170.6Kb) - бесплатно ] 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 | Теги: windows, unix, потоки, программирование, CRT, ОСи, C++
Просмотров: 1169 | Загрузок: 309 | Рейтинг: 0.0/0 |
Всего комментариев: 0

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




Рейтинг@Mail.ru Создать сайт бесплатно