Семафор (програмування) - це

визначення семафора

Семафор - це об'єкт, з яким можна виконати три операції.

Припустимо, що є така ділянка коду:

Тоді не більше п'яти потоків можуть одночасно виконувати функцію DoSomething ().

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

застосування семафорів

Ось деякі з проблем, які можуть вирішувати семафори.

  • заборона одночасного виконання заданих ділянок коду;
  • Почергове доступ до критичного ресурсу (важливого ресурсу. для якого неможливий одночасний доступ).

Наступний приклад показує, як налагодити по черзі доступ до консолі.

Цей код допоможе запобігти появі лістингу на зразок

проблеми семафорів

По-перше, можна написати програму з «витоком семафора», викликавши enter () і забувши викликати leave (). Рідше зустрічаються помилки, коли двічі викликається leave ().

По-друге, семафори чреваті взаємним блокуванням потоків. Зокрема, небезпечний такий код:

По-третє, залишається проблема синхронізації процедур самого семафора. Наприклад, можлива така ситуація: два процеси чекають звільнення семафора. Після того, як семафор звільнився, перший процес «дізнається» про це, але не встигає зменшити лічильник, як управління передається другому процесу. Другий процес теж дізнається про звільнення семафора, зменшує лічильник і входить в захищений ділянку коду. Тут управління передається першому процесу, той ще раз зменшує лічильник і теж входить в захищений ділянку коду. У підсумку маємо перевищення дозволеного числа процесів.

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

зовнішні посилання

Дивитися що таке "Семафор (програмування)" в інших словниках:

ПРОГРАМУВАННЯ ПАРАЛЕЛЬНЕ - розділ програмування, пов'язаний з вивченням і розробкою методів і засобів для: а) адекватного опису в програмах природного паралелізму модельованих в ЕОМ і керованих ЕОМ систем і процесів, б) розпаралелювання обробки інформації ... Математична енциклопедія

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

Інтерфейс (об'єктно-орієнтоване програмування) - Цей термін має також інші значення див. Інтерфейс (значення). Інтерфейс (від лат. Inter «між», і face «поверхню») семантична і синтаксична конструкція в коді програми, яка використовується для специфицирования ... ... Вікіпедія

Об'єкт (програмування) - Цей термін має також інші значення див. Об'єкт (значення). Об'єкт в програмуванні деяка сутність у віртуальному просторі, що володіє певним станом і поведінкою, що має задані значення властивостей (атрибутів) і ... ... Вікіпедія

Структура (програмування) - Цей термін має також інші значення див. Структура (значення). Структура конструкція більшості мов програмування, що дозволяє утримувати в собі набір змінних різних типів. У мовах сімейства Pascal структури ... ... Вікіпедія

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

ГОСТ 19781-90: Забезпечення систем обробки інформації програмне. Терміни та визначення - Термінологія ГОСТ 19781 90: Забезпечення систем обробки інформації програмне. Терміни та визначення оригінал документа: 9. Абсолютна програма Non relocatable program Програма на машинній мові, виконання якої залежить від її ... ... Словник-довідник термінів нормативно-технічної документації

Межпроцессное взаємодія - (англ. Inter Process Communication, IPC) набір способів обміну даними між безліччю потоків в одному або більше процесах. Процеси можуть бути запущені на одному або більше комп'ютерах, пов'язаних між собою мережею. IPC способи діляться ... ... Вікіпедія

Схожі статті