Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 4
1

"Спящий Парикмахер"

13.12.2010, 20:10. Показов 6577. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Одна классическая задача на синхронизацию процессов – это так называемая «задача о спящем парикмахере».
Рассмотрим парикмахерскую, в которой работает один парикмахер, имеется одно кресло для стрижки и несколько кресел в приемной для посетителей (3-5), ожидающих своей очереди. Если в парикмахерской нет посетителей, парикмахер засыпает прямо на своем рабочем месте. Появившийся посетитель должен его разбудить, в результате чего парикмахер приступает к работе. Если в процессе стрижки появляются новые посетители, они должны либо подождать своей очереди, либо покинуть парикмахерскую, если в приемной нет свободного кресла для ожидания. Задача состоит в том, чтобы корректно запрограммировать поведение парикмахера и посетителей. И соответственно это отобразить
Я честно пыталась сама на С++ В Builder 09, но все пои попытки провалились.
Может кто помочь?))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2010, 20:10
Ответы с готовыми решениями:

спящий режим
Существует функция для вхождения в спящий режим и функция ,наоборот, возобновления работы? Спасибо.

Отследить переход в спящий режим или гибернацию и выход из них (MFC)
(MFC) Как отследить переход в спящий режим или гибернацию и выход из них при работающим приложении?...

Спящий парикмахер. Многопоточность
Рассмотрим парикмахерскую, в которой работает один парикмахер, имеется одно кресло для стрижки и...

Спящий парикмахер. Многопоточность
Доброго времени суток, уважаемые форумчане! Прошу вашего совета. Начинаю осваивать Java и решил...

1
518 / 306 / 58
Регистрация: 30.07.2008
Сообщений: 607
14.12.2010, 01:26 2
Лучший ответ Сообщение было отмечено Leah как решение

Решение

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// ãëîáàëüíûå ïåðåìåííûå
int wait = 5; // ðàäíîìíîå âðåìåíÿ íà ñòðèæêó 1 ïîñåòèòåëÿ â ñåêóíäàõ
int kresla = 4; // êîëè÷åñòâî êðåñåë
bool strizhka = false;
int w = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    // íàñòðîéêè ïðè çàïóñêå
    Timer1->Enabled = false;
    Label2->Caption = "Óøåë äîìîé";
    Timer1->Interval = 1000;
    Timer1->Enabled = false;
}
//---------------------------------------------------------------------------
void l(AnsiString text) // ëîãèðîâàíèå
{
    Form1->Memo1->Lines->Add("[" + Time() + " " + Date() + "]==> " + text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    if(rand()%10 >= 7) // ïðèõîäèò ïîñåòèòåëü, èëè íå ïðèõîäèò =)
    {
        l("Â ïàðèêìàõåðñêóþ çàøåë ïîñåòèòåëü");
        if(Label5->Caption.ToInt() < kresla) // åñòü ñâîáîäíîå ìåñòî
        {
            if(rand()%10 >= 5) // ïîñåòèòåëü âûáåðàåò æäàòü åìó èëè óéòè
            {
                l("Ïîñåòèòåëü ðåøèë âñòàòü â î÷åðåäü");
                Label5->Caption = Label5->Caption.ToInt() + 1;
            }
            else
            {
                l("Ïîñåòèòåëü ðåøèë íå ñòîÿòü â î÷åðåäè");
            }
        }
        else // âñå ìåñòà çàíÿòû
        {
            l("Ïîñåòåòåëþ íåõâàòèëî ìåñòî, è îí óøåë íåäîâîëüíûé");
        }
    }
    // äåéñòâèÿ ïàðèêìàõåðà
    if(Label5->Caption.ToInt() == 0) // ïîñåòèòåëåé íåò
    {
        Label2->Caption = "Ñïèò";
    }
    else  // ïîñåòèòåëè åñòü
    {
        Label2->Caption = "Ðàáîòàåò";
        if(strizhka == false) // íà÷èíàåì ñòðèæêó
        {
            strizhka = true;
            w = (rand()%wait) + 1; // ðàíäîìíîå âðåìÿ íà ñòðèæêó 1ãî ïîñåòèòåëÿ
            l("Ïàðèêìàõåð íà÷èíàåò ñòðèæêó");
        }
        else
        {
            if((w--) == 0)
            {
                strizhka = false;
                Label5->Caption = Label5->Caption - 1;
                l("Ïàðèêìàõåð çàêîí÷èë ñòðèæêó! Êëèåíò ðàñïëàòèëñÿ è óøåë");
            }
        }
    }
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if(Timer1->Enabled)
    {
        Timer1->Enabled = false;
        Label2->Caption = "Óøåë äîìîé";
        Label5->Caption = 0;
        Button1->Caption = "Îòêðûòü ïàðèêìàõåðñêóþ";
    }
    else
    {
        Button1->Caption = "Çàêðûòü ïàðèêìàõåðñêóþ";
        Label5->Caption = 0;
        Timer1->Enabled = true;
    }
}
//---------------------------------------------------------------------------
1
14.12.2010, 01:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2010, 01:26
Помогаю со студенческими работами здесь

Спящий парикмахер, как ни странно
Добрый день. У меня есть задача написать Спящего парикмахера. И вот тут я столкнулся с проблемой...

"Спящий парикмахер", используя семафоры
Добрый день, подскажите если у кого есть код для задачки про спящего парикмахера, алгоритм понятен,...

Задача "Спящий парикмахер"
Пытался реализовать задачу &quot;Спящего парикмахера&quot; на Си под Linux, но при выполнении программы...

Спящий режим
Если не обращаться к ноутбуку какое-то время, он переходит в спящий режим. Можно ли регулировать...

Спящий режим
Такой вопрос назрел - известно, что при переходе в спящий режим все содержимое оперативы...

Спящий режим
Недавно поменял блок питания на Aerocool 500w, заметил, что в спящем режиме вентилятор бп работает....

Спящий режим
Что будет, если я отключу спящий режим?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru