Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
53
Добавлен:
30.03.2021
Размер:
724.76 Кб
Скачать

§ Ядро ОС и системные вызовы

§ Ядро ОС

Object = Process, Thread, Event, Semaphore, Mutex

§ Создание процессов и потоков

Итак, мы научились создавать процессы и потоки с помощью функций CreateProcess и CreateThread:

Теперь надо научиться организовывать последовательное выполнение потоков. Это можно делать с помощью:

функций ожидания;

объектов ядра типа событий, семафоров, мьютексов.

§. Синхронизация задач с использованием функций ожидания.

Функции ожидания позволяют потоку в любой момент приостановиться и подождать освобождения (перехода в сигнальное состояние) какого-либо объекта ядра.

Ожидание освобождения одного объекта организуется с помощью функции

DWORD WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds); где hHandle – дескриптор объекта, dwMilliseconds - время ожидания в мсек.

Если объект с hHandle находится в несигнальном (занятом) состоянии, функция ждёт, пока он перейдёт в сигнальное состояние или пока не закончится время ожидания.

Функция может вернуть следующие значения:

WAIT_TIMEOUT: время ожидания истекло, а объект так и не перешёл в сигнальное состояние;

WAIT_OBJECT_0: объект находится в сигнальном состоянии;

WAIT_ABANDONED: возможно только для мьютексов и означает то, что мьютекс освободился вследствие окончания выполнения владевшего им потока;

WAIT_FAILED: ошибка выполнения функции.

Если dwMilliseconds = 0, функция проверяет состояние объекта и сразу же завершает свою работу с возвращением результата.

Соседние файлы в папке АОПИ. Лекции