Системное програмирование, потоки, лабораторная работа

3 500 руб. за проект
25 января 2023, 19:56 • 6 откликов • 99 просмотров
Общая постановка задачи.
Требуется разработать программу в виде Linux-приложения, для различных
частей которой создаются и запускается потоки выполнения, а для
синхронизации доступа к требуемым ресурсам используются соответствующие
объекты ОС. Результат выполнения выводится на терминал/консоль.
Программа должна быть устойчивой к некорректному пользовательскому
вводу. Функционирование программы, если это не оговаривается особо, может
быть завершено только путем принудительного снятия процесса с выполнения.
В большинстве вариантов заданий решаются классические задачи
синхронизации. Приостановка выполнения потока на заданный промежуток
времени может выполняться вызовом функции nanosleep().


«Обедающие философы 11
». В пансионе отдыхают и предаются
размышлениям 5 философов (потоки), пронумерованные от 1 до 5. В столовой
расположен круглый стол, вокруг которого расставлены 5 стульев, также
пронумерованные от 1 до 5. На столе находится одна большая тарелка со
спагетти, которая пополняется бесконечно. Также там расставлены 5 тарелок,
куда накладываются спагетти, и 5 вилок (разделяемые ресурсы), назначение
которых очевидно.
Для того чтобы пообедать, философ входит в столовую и садится на
стул со своим номером. При этом есть философ сможет только в том случае,
если свободны две вилки – справа и слева от его тарелки. При выполнении
этого условия философ поднимает одновременно обе вилки и может поглощать
пищу в течение какого-то заданного времени. В противном случае философу
приходится ждать освобождения обеих вилок.
Пообедав, философ кладет обе вилки на стол одновременно и уходит.
Величина временного промежутка для поглощения пищи устанавливается
пользователем при старте приложения, а появление философа в столовой
является случайной величиной с равномерным законом распределения.