АОПИ. Лекции / 5
.pdf§ Ядро ОС и системные вызовы
§ Ядро ОС
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, функция проверяет состояние объекта и сразу же завершает свою работу с возвращением результата.