Операционные системы. Программирование в операционной среде Windows

38 WaitForSingleObj ect(g_hEvent, INFINITE); // no завершении ожидания, поток обращается к блоку памяти // производится обработка данных return(О); } DWORD WINAPI Fun2(PVOID pvParam) { // поток ждет освобождения события, // т.е. когда в память будут загружены данные из файла WaitForSingleObj ect(g_hEvent, INFINITE); // no завершении ожидания, поток обраш;ается к блоку памяти // производится обработка данных return(О); } Процесс создает занятое событие со сбросом вручнуюи записывает его описатель в глобальную переменную. Затем порождается два потока. Каждый поток вызывает функцию WaitForSingleObject, которая приостанавливает поток до тех пор, пока первичный поток загружает в память содержимое файла. Загрузив нужные данные, первичный поток вызывает функцию SetEvent, которая переводит событие в свободное состояние. Ожидание потоками события успешно завершается, тогда система пробуждает оба вторичных потока. Потоки, получив процессорное время, обраш,аются к блоку памяти. Они получают доступ к памяти в режиме только для чтения, поэтому они могут выполняться одновременно. Если событие со сбросом вручную заменить событием с автосбросом, приложение будет вести себя иначе. После вызова первичным потоком функции SetEvent система возобновит выполнение только одного из вторичных потоков, какого именно — сказать заранее нельзя. Поток, ставший планируемым, получает монопольный доступ к блоку памяти, где хранятся данные, считанные из файла. Другой поток продолжает ждать. 3.5.3. Семафоры ОЯ «семафор» используются для учета ресурсов. ОЯ «семафор» содержат счетчик числа пользователей, максимальное число контролируемых семафором ресурсов, счетчик текуш,его числа свободных ресурсов. Для семафоров определены следующие правила: - когда счетчик текуш,его числа ресурсов становится больше нуля, семафор переходит в свободное состояние; - если счетчик текущего числа ресурсов равен нулю, семафор занят; - система не допускает присвоения отрицательных значений счетчику текущего числа ресурсов; - счетчик текущего числа ресурсов не может быть больше максимального числа ресурсов. ОЯ «семафор» создается вызовом функции CreateSemaphore:

RkJQdWJsaXNoZXIy MTY0OTYy