TNKernel Семафори PIC24
Семафор – це об'єкт RTOS, призначений для синхронізації завдань та забезпечення конкурентного доступу до ресурсів програми. В даний час лише одне завдання може "володіти" семафором. Завдання, що намагається заволодіти вже захопленим семафором, переводиться в стан WAITING і ставиться в чергу завдань, які чекають на семафор, доки він не буде звільнений.
Існує кілька типів семафорів - лічильний семафор, двійковий семафор (підтип лічильного) та семафор конкурентного доступу або мютекс. У TNKernel мютекс є окремим об'єктом та розглянутий у відповідному розділі.
Рахунковий семафор можна порівняти з менеджером готелю, який має кілька ключів від однієї кімнати. Менеджер видаватиме мешканцям кімнати (завданням RTOS) ключі доти, доки вони не закінчаться (семафор захоплений). Як тільки один із мешканців поверне ключ від кімнати, він відразу буде виданий мешканцю (завданню), що очікує ключ.
Таким чином, з рахунковим семафором асоційовано таке поняття як лічильник вільних ресурсів. Якщо лічильник більший за нуль - семафор може бути захоплений одним із завдань, при цьому лічильник ресурсів зменшується на одиницю. Якщо лічильник дорівнює нулю - семафор заблокований, і всі завдання, що намагаються його захопити, будуть поставлені в чергу очікування семафору. Як тільки лічильник ресурсів семафору стане більшим за нуль - семафор захопить перше завдання з черги тих, хто очікує.
Двійковий семафор є підтипом лічильного - його лічильник вільних ресурсів може набувати лише значення 0 (захоплений) і 1 (вільний). У TNKernel семафори не поділяються на двійкові та рахункові - максимальне значення лічильника ресурсів задається під час створення семафору.
Структура управління семафором
Кожен семафор асоціюється із структуроюуправління:
До складу структури семафору входять такі елементи: