ustify"> Лістинг. 9 Порушене рішення з кінцевим буфером
Але ми не можемо це зробити, так як ми не можемо дізнатися поточне значення семафора, є тільки операції сигналу і очікування.
Завдання: написати код, який обробляє обмеження кінцевого буфера споживача - виробника.
. Сигнал кінцевого буфера виробника споживача
Додамо другий семафор, щоб відстежувати число доступного місця в буфер.
mutex = Semaphore (1)
items = Semaphore (0)
spaces = Semaphore (buffer.size ())
Лістинг. 10 Ініціалізація кінцевого буфера виробника - споживача. Коли споживач видаляє елемент, то він повинен подати сигнал про звільнення пам'яті. Коли приходить виробник, він повинен декрементіровать вільне місце, в цій точці можливе блокування до наступного сигналу споживача. br/>
. Кінцевий буфер виробника споживача. Рішення
Нижче наведено кінцеве рішення:
1 items.wait ()
2 mutex.wait ()
event = buffer.get ()
mutex.signal ()
spaces.signal ()
event.process ()
Лістинг. 11 Рішення споживача з кінцевим буфером
Код виробника симетричний:
event = waitForEvent ()
spaces.wait ()
mutex.wait ()
buffer.add (event)
mutex.signal ()
items.signal ()
Лістинг. 12 Рішення виробника з кінцевим буфером
Для того, що б уникнути deadlock виробників і споживачів, потрібно перевірити наявність вільних місць до захоплення мьютекса. Для кращої продуктивності м'ютекс звільняють до подачі сигналу. br/>
. ОСРВ RTX
Розширення IntervalZero RTX - програмний засіб, призначений для додавання функціональності "жорсткого" реального часу в системи під управлінням операційних систем Microsoft Windows. Програмний продукт RTX був з успіхом випробуваний у тисячах різних автоматизованих систем управління, оборонних та аерокосмічних системах, контрольно-вимірювальної апаратури, роботах і т.д. Він дозволив домогтися підвищення їх ефективності, можливостей, ступеня масштабованості і надійності функціонування при одночасному скороченні термінів і вартості розробки нової продукції. br/>
. Постановка завдання
заправну станцію обслуговує один заправник (виробник) і заправляється один споживач. У одиницю часу можна або зливати паливо, або заправлятися, розмір бака споживача і розмір бака заправки кінцеві. Реалізува...