Операционные системы. Программирование в операционной среде Windows
39 HANDLE CreateSemaphore (PSECURITY_ATTRIBUTE psa, LONG 1InitialCount, LONG IMaximumCount, PCTRTR pszName); В параметре psa задается указатель на атрибуты защиты ОЯ. Параметр IMaximumCount сообщает системе максимальное число ресурсов, обрабатываемое приложением. Параметр llnitial Count указывает, сколько из этих ресурсов доступно на текущий момент. В параметре pszName можно передать адрес строки с именем ОЯ, а при передаче в нем значения NULL, создается безымянный ОЯ. Любой процесс может получить свой описатель существующего ОЯ «семафор», вызвав функцию OpenSemaphore: HANDLE OpenSemaphore (DWORD fdwAccess, BOOL binheritHandle, PCTSTR pszName); Пример создания ОЯ «семафор» со счетчиком максимального числа ресурсов равным 5, при этом изначально ни один ресурс не доступен, т.к. счетчику текущего числа ресурсов присвоен 0. HANDLE hSem = CreateSemaphore(NULL, О, 5, NULL); Поток получает доступ к ресурсу, вызывая одну из Wait-функций и передавая ей описатель семафора, который охраняет этот ресурс. Wait- функция проверяет счетчик текущего числа ресурсов, если его значение больше О, то уменьшает значение этого счетчика на 1, и вызывающий поток остается планируемым. Если Wait-функция определяет, что счетчик текущего числа ресурсов равен О, то система переводит вызывающий поток в состояние ожидания. В тот момент, когда другой поток увеличит значение этого счетчика, система вспомнит о ждущем потоке и снова начнет выделять ему процессорное время. Поток увеличивает значение счетчика текущего числа ресурсов, вызывая функцию ReleaseSemaphore: BOOL ReleaseSemaphore(HANDLE hSem, LONG IReleaseCount, PLONG plPreviousCount); Функция складывает величину IReleaseCount со значением счетчика текущего числа ресурсов. Обычно в параметре IReleaseCount передают 1, но можно передавать в нем значения большие L Функция возвращает исходное значение счетчика ресурсов в "^plPreviousCount. Если это значение не интересует, в параметре plPreviousCount передается значение NULL. 3.5.4. Мьютексы ОЯ «мъютекс» гарантируют потокам взаимоисключаюпщй доступ к единственному ресурсу (mutual exclusion, mutex). Они содержат счетчик числа пользователей, счетчик рекурсии и переменную, в которой запоминается идентификатор потока. Мьютексы подобны критическим секциям. По критические секции являются объектами пользовательского режима, а мьютексы — ОЯ. ОЯ «мьютекс» позволяет синхронизировать
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy