С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 28

Приведен алгоритм решения, нужно довести его до рабочего состояния

01.06.2020, 18:48. Показов 880. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача об обедающих философах.
Суть задачи: пять философов сидят за круглым столом. Они проводят жизнь, чередуя приемы пищи и размышления. В центре стола находится большое блюдо спагетти. Философам, чтобы съесть порцию спагетти, требуется две вилки. Вилок всего пять: между каждой парой философов лежит по одной вилке. Каждому философу дозволительно пользоваться только вилками, которые лежат рядом с ним (слева и справа). Задача – написать программу, моделирующую поведение философов. Программа должна избегать ситуации, в которой все философы голодны, то есть ни один из них не может взять себе две вилки (например, когда каждый философ держит по одной вилке и не хочет отдавать ее). Раз вилок всего пять, то одновременно могут есть не более, чем двое философов. Два сидящих рядом философа не могут есть одновременно. Предположим, что периоды раздумий и приемов пищи различны – для их имитации в программе можно использовать генератор случайных чисел. Имитация поведения каждого философа может быть разбита на следующие блоки: поразмыслить, взять вилки, поесть, отдать вилки. Вилки являются разделяемым ресурсом.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#define N       5       /* количество философов */
#define LEFT        (i+N-1) %N     /* номер левого соседа для i-го философа */
#define RIGHT       (i+1) %N       /* номер правого соседа для i-го философа */
#define THINKING    0       /* философ размышляет */
#define HUNGRY      1       /* философ пытается взять вилки */
#define EATING      2       /* философ ест спагетти */
 
typedef int semaphore;              
 
int state[N];               /* массив для отслеживания состояния каждого     философа*/
semaphore mutex = 1;                /* взаимное исключение входа в критическую  область*/
semaphore s[N];             /* по одному семафору на каждого философа*/
 
void philosopher(int 1)     /* i - номер философа (от 0 до N-1) */
{
    while (TRUE) {          /* бесконечный цикл */
        think ();       /* философ размышляет */
        take_forks(i);      /* берет две вилки или блокируется */
        eat();          /* ест спагетти */
        put_forks(i);       /* кладет обе вилки на стол */
    }
}
 
void take_forks(int i)          /* i - номер философа (от 0 до N-1) */
{
    down(& mutex);          /* вход в критическую область */
    state[i] = HUNGRY;      /* философ стремится поесть */
 
    test(i);            /* попытка взять две вилки */
    up(& mutex);            /* выход из критической области */
    down(& s[i]);           /* блокирование, если вилки взять не удалось */
}
 
void put_forks(i)           /* i - номер философа (от 0 до N-1) */
{
    down(& mutex);          /* вход в критическую область */
    state[i] = THINKING;        /* философ наелся */
    test(LEFT);         /* проверка готовности к еде соседа слева */
 
    test(RIGHT);            /* проверка готовности к еде соседа справа */
    up(& mutex);            /* выход из критической области */
}
 
void test(i)                /* i - номер философа (от 0 до N-1) */
{
    if (state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] != EATING)
    {
        state[i] = EATING;
        up(&s[i]);
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.06.2020, 18:48
Ответы с готовыми решениями:

Нужно довести до рабочего состояния.Спасибо
<html> <head> <script type="text/javascript" language="JavaScript"> alert("Внимание! Изменяется цветовая палитра документа!"); ...

Довести код до рабочего состояния
Нашел видео в интернете. Делал по нему, но у меня не работает, а как сделать не знаю. Сам не напишу. class BmpTime { public: ...

Есть, код, половину написал сам, но до рабочего состояния довёл знакомый. Нужно разобрать часть кода.
Есть, код, половину написал сам, но до рабочего состояния довёл знакомый. Нужно разобрать часть кода. .model small .data _str db...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2020, 18:48
Помогаю со студенческими работами здесь

Нужно разработать алгоритм решения этой задачи и изобразить его в виде блок -схемы и в виде структурированного текста (псевдокода).
Даны натуральное число m , одноименный действительный массив В порядка m. Переписать массив В в массив А в порядке убывания значения...

Подскажите как довести программу до хорошего состояния
Я пишу тестовое задание для трудоустройства. В целом считаю,что с заданием я справился, но т.к. я программист-самоучка ( высшее образование...

нужно составить алгоритм решения для 5 задач
и лучше конечно было бы на scheme

составьте алгоритм решения по этой ...очень нужно ...
program SortWord; uses crt; var word: string; temp: char; i, j: integer ; begin clrscr; writeln ('Input word:'); ...

Доработка БД до рабочего состояния
Товарищи, надо доделать БД до рабочего состояния, но у меня сил не хватает доделывать (да и не понимаю уже, что да как). Есть все кнопки,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru