Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Синхронизация потоков



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; Прочитано: 287 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...