![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
1. Объекты синхронизации могут находится в двух состояниях.
1) signaled – свободен 2) non-signaled – занят
2. Если состояние свободное, то работа потока разрешена, если в занятом, то запрещена. Для созда-ния объектов синхронизации используются функции типа
CreateMutex(…) (тот кто открывает, тот и закрывает, нет счётчика), CreateSemaphore(…) (есть счётчик), CreateEvent(…).
Они возвращают дескриптор (указатель) на созданный объект.
3. Для перехода объектов синхронизации в свободное состояние используются функции типа
ReleaseMutex(…), ReleaseSemaphore(…), ReleaseEvent(…).
4. Для ожидания освобождения события используются функции
WaitForSingleObject(…) – ожидает освобождение какого-либо одного объекта. В качестве пара-метров передаётся дескриптор объекта, время ожидания.
WaitForMultipleObject(…) – ожидает освобождения нескольких объектов. В качестве параметров выступают указатель на массив дескрипторов, количество ожидаемых объектов, время ожидания и тип ожидания (все объекты или хотя бы один объект).
Пример. Пусть имеется база данных, к которой по сети обращаются несколько пользователей. Для обслуживания запроса каждого пользователя создаётся отдельный поток. В созданном потоке надо организовать единоличный доступ к записям базы данных.
CreateMutex(…);WaitForSingleObject(…);
ОС анализирует, в каком состоянии находится объект синхронизации. Если объект синхронизации находится в состоянии non-signaled, то ОС прекращает выполнение этого потока.
// Обработка базы данных.
Если объект занят, то обработка не будет происходить.
ReleaseMutex(…)
Если объект находится в свободном состоянии, то функция WaitForSingleObject(…) переводит его в занятое состояние, то есть никакой другой поток не может получить доступ к данным.
21. Критические секции (КС).
Дата публикования: 2014-11-03; Прочитано: 313 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!