- •Системне програмування, характерні особливості.
- •Асемблер. Варіанти спільного використання асемблера і мов високого рівня.
- •Інструментальні засоби розробки програм на мові Асемблер.
- •Регістри.
- •Користувацькі регістри.
- •Сегментні регістри.
- •Організація роботи з пам’ятю.
- •Сегментна модель пам’яті.
- •Набір команд мікропроцесора.
- •Специфікація типів даних
- •11. Використання арі-функцій.
- •12. Структура програми, приклад простої програми для Windows.
- •13. Передача параметрів через стек
- •14. Використання ресурсів при роботі з діалоговими вікнами.
- •15.Використання ресурсів при роботі з меню.
- •16. Використання акселераторів у файлах ресурсу.
- •17. Ресурси. Переваги використання ресурсів у програмах.
- •18. Використання ресурсів при роботі з іконками, рядками, курсорами.
- •21. Потоки, взаємодія потоків.
- •22. Семафори блять! Події нахуй!
- •23. Критичні секції.
22. Семафори блять! Події нахуй!
Семафор являє собою глобальний об'єкт, що дозволяє синхронізувати роботу двох або декількох процесів або потоків. Для програміста семафор - це просто лічильник. Якщо лічильник дорівнює N, це означає, що до ресурсу мають доступ N процесів. Розглянемо функції для роботи з семафорами.
CreateSemaphore - створює глобальний об'єкт-семафор. Повертає дескриптор семафор.
Параметри функції:
й параметр. Покажчик на структуру, яка визначає атрибути доступу. Може мати значення для Windows NT. Зазвичай цей параметр вважається рівним NULL.
й параметр. Початкове значення лічильника семафор. Визначає, скільки завдань мають доступ до ресурсу спочатку.
й параметр. Кількість завдань, які мають одночасний доступ до ресурсу.
й параметр. Покажчик на рядок, що містить ім'я семафор.
OpenSemaphore - відкрити вже створений семафор. Повертає дескриптор семафор. Цю функцію використовують не так часто. Зазвичай створюють семафор і присвоюють його дескриптор глобальної змінної, а потім використовують цей дескриптор в породжуванні потоків.
Параметри функції:
й параметр. Визначає бажаний рівень доступу до семафору. Можливі значення: SEMAPHORE_MODIFY_STATE =2Н, дозволити використовувати функцію ReleaseSemaphore,
Synchronize = 100000Н, дозволити використання будь-якої функції очікування, тільки для Windows NT,
SEMAPHORE_ALL_ACCESS = OFOOOOh + Synchronize + ЗН, специфікує всі можливі прапори доступу до семафору.
й параметр. Вказує, чи можо наслідувати дескриптор семафору, створюваний функцією CreateProcess; 0 - не може.
й параметр. Покажчик на ASCII Z-рядок, що містить ім'я семафор.
WaitForSingleObject - очікувати відкриття семафору. При успішному завершенні, тобто відкриття доступу до об'єкта, функція повертає 0.
Параметри функції:
й параметр. Дескриптор семафор.
й параметр. Час очікування в мілісекунд.
Якщо параметр дорівнює Infinite = OFFFFFFFFh, то час очікування не обмежено.
ReleaseSemaphore - звільнити семафор і дозволити отримати доступ до ресурсу іншим процесам.
Параметри функції:
й параметр. Дескриптор семафор.
й параметр. Визначає, яке значення має бути додано до лічильника семафрору. Найчастіше цей параметр дорівнює одиниці.
й параметр. Покажчик на змінну, куди має бути поміщено попереднє значення лічильника.
Розглянемо алгоритм роботи з семафором.
Спочатку за допомогою функції CreateSemaphore створюється семафор і його дескриптор присвоюється глобальній змінній. Перед спробою звернення до ресурсів, доступ до яких необхідно обмежити, потік повинен викликати функцію WaitForSingleObject. При відкритті доступу функція повертає 0. По закінченні роботи з ресурсом слід викликати функцію ReleaseSemaphore. Тим самим збільшується лічильник доступу на 1.
3а допомогою Семафору можна регулювати кількість потоків, які одночасно можуть мати доступ до ресурсу.
Максимальне значення лічильника як раз і визначає скільки потоків можуть отримати доступ до ресурсу одночасно.
Події. Подія об'єктом, дуже схожим на семафор, але в видозміненому вигляді.
Розглянемо функції для роботи з подіями.
CreateEvent - створює об’єкт -подія параметри функції.
1-й параметр Має той же зміст, що й перший параметр функції CreateSemaphore. Зазвичай покладається рівним NULL.
2-й параметр якщо параметр не дорівнює нулю то, то подія може бути скинута за допомогою функції ResetEvent. Інакше подія скидається при доступі до нього будь-якого процесу.
3-й параметр якщо параметр дорівнює 0, то подія ініціалізується як скинута в іншому випадку відразу ж подається сигнал про настання відповідної ситуації
4-й параметр. Покажчик на рядок, що містить ім'я події.
Очікування події здійснюється, як і у випадку з семафору, функцією WaitForSingleObject.
Функція OpenEvent аналогічна функції OpenSemaphore.
SetEvent - подати сигнал про настання події.
Параметри функції.
1-й параметр. Дескриптор події.
