Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Асемблер ВІДПОВІДІ!!!.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
124 Кб
Скачать
☆

22. Семафори блять! Події нахуй!

Семафор являє собою глобальний об'єкт, що дозволяє синхронізувати роботу двох або декількох процесів або потоків. Для програміста семафор - це просто лічильник. Якщо лічильник дорівнює N, це означає, що до ресурсу мають доступ N процесів. Розглянемо функції для роботи з семафорами.

CreateSemaphore - створює глобальний об'єкт-семафор. Повертає дескриптор семафор.

Параметри функції:

  1. й параметр. Покажчик на структуру, яка визначає атрибути доступу. Може мати значення для Windows NT. Зазвичай цей параметр вважається рівним NULL.

  2. й параметр. Початкове значення лічильника семафор. Визначає, скільки завдань мають доступ до ресурсу спочатку.

  3. й параметр. Кількість завдань, які мають одночасний доступ до ресурсу.

  4. й параметр. Покажчик на рядок, що містить ім'я семафор.

OpenSemaphore - відкрити вже створений семафор. Повертає дескриптор семафор. Цю функцію використовують не так часто. Зазвичай створюють семафор і присвоюють його дескриптор глобальної змінної, а потім використовують цей дескриптор в породжуванні потоків.

Параметри функції:

  1. й параметр. Визначає бажаний рівень доступу до семафору. Можливі значення: SEMAPHORE_MODIFY_STATE =2Н, дозволити використовувати функцію ReleaseSemaphore,

Synchronize = 100000Н, дозволити використання будь-якої функції очікування, тільки для Windows NT,

SEMAPHORE_ALL_ACCESS = OFOOOOh + Synchronize + ЗН, специфікує всі можливі прапори доступу до семафору.

  1. й параметр. Вказує, чи можо наслідувати дескриптор семафору, створюваний функцією CreateProcess; 0 - не може.

  2. й параметр. Покажчик на ASCII Z-рядок, що містить ім'я семафор.

WaitForSingleObject - очікувати відкриття семафору. При успішному завершенні, тобто відкриття доступу до об'єкта, функція повертає 0.

Параметри функції:

  1. й параметр. Дескриптор семафор.

  2. й параметр. Час очікування в мілісекунд.

Якщо параметр дорівнює Infinite = OFFFFFFFFh, то час очікування не обмежено.

ReleaseSemaphore - звільнити семафор і дозволити отримати доступ до ресурсу іншим процесам.

Параметри функції:

  1. й параметр. Дескриптор семафор.

  2. й параметр. Визначає, яке значення має бути додано до лічильника семафрору. Найчастіше цей параметр дорівнює одиниці.

  3. й параметр. Покажчик на змінну, куди має бути поміщено попереднє значення лічильника.

Розглянемо алгоритм роботи з семафором.

Спочатку за допомогою функції CreateSemaphore створюється семафор і його дескриптор присвоюється глобальній змінній. Перед спробою звернення до ресурсів, доступ до яких необхідно обмежити, потік повинен викликати функцію WaitForSingleObject. При відкритті доступу функція повертає 0. По закінченні роботи з ресурсом слід викликати функцію ReleaseSemaphore. Тим самим збільшується лічильник доступу на 1.

3а допомогою Семафору можна регулювати кількість потоків, які одночасно можуть мати доступ до ресурсу.

Максимальне значення лічильника як раз і визначає скільки потоків можуть отримати доступ до ресурсу одночасно.

Події. Подія об'єктом, дуже схожим на семафор, але в видозміненому вигляді.

Розглянемо функції для роботи з подіями.

CreateEvent - створює об’єкт -подія параметри функції.

1-й параметр Має той же зміст, що й перший параметр функції CreateSemaphore. Зазвичай покладається рівним NULL.

2-й параметр якщо параметр не дорівнює нулю то, то подія може бути скинута за допомогою функції ResetEvent. Інакше подія скидається при доступі до нього будь-якого процесу.

3-й параметр якщо параметр дорівнює 0, то подія ініціалізується як скинута в іншому випадку відразу ж подається сигнал про настання відповідної ситуації

4-й параметр. Покажчик на рядок, що містить ім'я події.

Очікування події здійснюється, як і у випадку з семафору, функцією WaitForSingleObject.

Функція OpenEvent аналогічна функції OpenSemaphore.

SetEvent - подати сигнал про настання події.

Параметри функції.

1-й параметр. Дескриптор події.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]