Логiку змiнювати не можна
Завдання:
(Код до завдання прикрiпив нижче)
Програма запускає потоки автомата (vending machine), постачальника (supplier) та клієнтів:
• Автомат очікує на кидок монети, після чого видаватиме товар або повертатиме монету, якщо запаси закінчились.
• Постачальник відкриває автомат, поповнює товар і знову його закриває.
• Клієнти поступово підходять до автомата, кидають монету і забирають товар або повернену монету і йдуть. З автоматом може взаємодіяти завжди лише одна особа.
Виріште конкретну поведінку потоків відповідно до наведеного опису.
Критичні секції оберігайте як найкоротші можливі та синхронізуйте дії так, щоб вони правильно з'єднувалися без зайвого затриму:
• синхронний запуск усіх осіб,
• порядок дій під час взаємодії з автоматом.
Окремі дії представлені відповідними висновками. Вставка будь-якої затримки в будь-яке місце не повинна впливати на правильність роботи програми.
Використання активного очікування не допускається.
Для синхронізації використовуйте posix-бар'єри та безіменні семафори. Для захисту критичних секцій використовуйте м'ютекси posix-потоків. Оптимізуйте кількість використаних змінних (використовуйте лише мінімально необхідну кількість).
Змінні назвіть так, щоб вони чітко відображали призначення їх використання. Для синхронізаційних семафорів рекомендується, щоб ім'я змінної семафору відображало дію, на яку очікується за допомогою цього семафору.