Асинхронний семафор

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Асинхронний  семафор - це структура, яка використовується в асинхронних моделях програмування. Її мета — заблокувати fire-дію, дозволяючи йому виконатися тільки після того, як група інших, асинхронних дій виконається повністю.

Асинхронний семафор — специфічний тип абстрактної структури даних семафор в світі  асинхронного програмування.

Концепцію семафор винайшов голландський вчений Едсгер Дейкстра.

Структура асинхронного семафора

[ред. | ред. код]

Асинхронний семафор приймає функцію як аргумент: Цей аргумент зазвичай називають «fire-функція». Fire-функція буде виконана після того, як всі асинхронні дії будуть завершені.

Асинхронний семафор також має блокуючу змінну: лічильник, який зберігає число невиконаних на даний момент асинхронних дій, що залишилися в черзі. Коли цей лічильник стає рівним нулю, всі асинхронні дії вже завершилися і викликається fire-функція.

Асинхронний семафор має дві додаткові функції:

  1. Функція v (): при виклику цієї функції, значення внутрішньої блокує змінної збільшується. Це збільшення характеризує додавання одного з асинхронних дій в чергу і очікування їм процесорного часу для виконання.
  2. Функція p (): коли асинхронне дія завершується, викликається функція р (). Функція p () зменшує значення внутрішньої блокує змінної. Виконане асинхронне дія завершується і видаляється з черги. Функція p () викликається зсередини завершеного асинхронного дії функції зворотного виклику. Функція p () також перевіряє рівність нулю змінної, яка характеризує кількість асинхронних дій в черзі. Якщо це так, всі дії були завершені, і fire-функція може бути викликана.

Використання асинхронного семафора

[ред. | ред. код]

Всякий раз, коли програміст викликає одне з асинхронних дій (яке насправді буде виконане потім, коли звільниться процесорний час), програміст також викликає функцію v () асинхронного семафора з метою збільшення внутрішньої змінної блокування, яка характеризує факт додавання асинхронного дії в чергу.

Коли зворотний виклик цій асинхронної функції закінчив своє виконання, викликається функція p (), яка зменшує внутрішню змінну блокування. Це відображає той факт, що асинхронне дію завершено.

Функція p () також перевіряє, чи дорівнює нулю змінна блокування. Якщо це так, значить все асинхронні дії були завершені і «fire-функція» буде викликана.

Асинхронний семафор ефективний, коли асинхронні дії виконуються незалежно.

Примітки

[ред. | ред. код]

Посилання

[ред. | ред. код]