47255 (Использование семафоров для синхронизации потоков), страница 2
Описание файла
Документ из архива "Использование семафоров для синхронизации потоков", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "47255"
Текст 2 страницы из документа "47255"
Этот счетчик уменьшается, когда задача вызывает функции ожидания, такие как WaitForSingleObject() или WaitForMultipleObject(). Если задача вызывает несколько раз функцию ожидания для одного и того же семафора, содержимое его счетчика каждый раз будет уменьшаться.
Таким образом, алгоритм работы с семафорами выглядит следующим образом:
-
поток создает или открывает семафор с помощью функций CreateSemaphore() или OpenSemaphore() соответственно;
-
поток вызывает функцию WaitForSingleObject() для того, чтобы определить, свободен ли требуемый потоку ресурс. В зависимости от результата, возвращаемого этой функцией, определяются дальнейшие действия;
-
при завершении поток вызывает функцию ReleaseSemaphore(), освобождающую семафор.
Единственная возможность определения текущего значения счетчика семафора заключается в увеличении этого значения функцией ReleaseSemaphore() Значение счетчика, которое было до увеличения, будет записано в переменную, адрес которой передается функции ReleaseSemaphore() через параметр lplPreviousCount.
Одной из проблем, которая возникает при использовании семафоров является проблема синхронизации – взаимные блокировки (дедлоки, клинчи, тупики).