2023-10-19

vak: (Default)
Давайте покажу вам в упрощённом варианте, чем я занимаюсь по работе последние полтора десятка лет. Симуляторы компьютерных архитектур, которые по сути сводятся к так называемому Discrete-event simulation.

Промоделируем на Си++ классическую задачку: пять обедающих философов.

Пятеро молчаливых философов сидят за круглым столом с мисками с едой. Между каждой парой философов раскладываются вилки. Весь день философы по очереди едят и думают. Чтобы есть, философу нужно две вилки, но каждой вилкой одновременно может пользоваться только один философ. В любой момент философ может взять или положить вилку справа или слева от себя, но не может начать есть, пока не получит обе вилки.



На видео показано, как процесс может выглядеть а текстовом экране. Думающий философ показан синим цветом, кушающий - зелёным, ожидающий - красным.



Смоделируем это дело на Си++. Представим каждого философа объектом класса Philosopher, каждую вилку объектом класса Fork. Объект Simulator будет разворачивать процесс во времени. Вот такая главная программа:

Исходники здесь: github.com/sergev/vak-opensource/tree/master/languages/c++/philosophers