Автор работы: Пользователь скрыл имя, 21 Января 2011 в 18:07, курсовая работа
Данная  работа состоит из двух  основных частей. В теоретической  части мы рассмотрим историю возникновения понятия алгоритма, узнаем определение алгоритма,  виды и свойства алгоритмов. 
     В практической части мы выполним решение  задачи «О спящем парикмахере» при помощи сети Петри и реализуем данную модель на языке высокого уровня с использованием семафоров (С++).
Введение 3
     1 Мультипрограммный режим  4
     1.1 Основные положения 4
     1.2 Проблема критической секции 5
     2 Мониторы хоара 8
     2.1 История создания 8
     2.2 Определения и основные характеристики 9
     2.3 Принцип работы монитора 10
     2.4 Условные переменные 11
     2.5 Преимущества монитора 12
     3 Задача о спящем парикмахере 14
     3.1 Постановка задачи 14
     3.2 Реализация задачи с помощью сетей Петри 15
     3.3 Листинг программы 16
     Заключение 22
     Список использованных источников 23
}
//----------------------------
DWORD WINAPI barber(LPVOID) //парикмахер
{
While(TRUE)
{
     If(count 
== 0)                            
{
            Zprint("
            MainFormBarber->
//заблокируемся до появления посетителя
            WaitForSingleObjec
}
      else                    
{
//получаем доступ к ожидающим
     WaitForSingleObject(
            count--;          
            ReleaseSemaphore(
            //
            ReleaseSemaphore(
            getPricheson() ;                             
}
}
}
//----------------------------
DWORD WINAPI customer(LPVOID) //клиент
{
      WaitForSingleObject(
if(count < NUMBER_OF_SEATS ) //если есть свободное место
{
            Sleep(SLEEP_PRX); 
char buffer2[100];
sprintf(buffer2, 
"Пришел %d клиент. Cел на %d кресло 
для ожидания",client+1,count+
            Zprint((
            client++;         
            count++;          
switch ( count ) {
            case 1: {MainFormBarber->Label5->
            case 2: {MainFormBarber->Label9->
            case 3: {MainFormBarber->Label10->
            case 4: {MainFormBarber->Label11->
            case 5: {MainFormBarber->Label12->
}
     MainFormBarber->Label13->
            MainFormBarber->
//если парикмахер спит, это его разбудит
            ReleaseSemaphore(
            ReleaseSemaphore(
//если парикмахер занят, переходим в состояние ожидания
     WaitForSingleObject(
}
else
{
            Sleep(SLEEP_PRX); 
//нет 
свободного кресла для 
     ReleaseSemaphore(mutex,1,
char buffer3[100];
sprintf(buffer3, "Клиент %d видит, что все места заняты и уходит",client+1);
            MainFormBarber->
            Zprint((
yshed++; //увеличиваем счетчик ушедших
            client++;         
            MainFormBarber->
}
   
Sleep(SLEEP_PRX);             
}
//----------------------------
void getPricheson()                
{
char buffer1[100];
sprintf(buffer1, 
"Парикмахер стрижет клиента, 
который сидел на месте %d",
      Zprint((AnsiString)
switch ( count+1 ) {
                  case 1: {MainFormBarber->Label8->
                  MainFormBarb
                  case 2: {MainFormBarber->Label8->
                  MainFormBarb
                  case 3: {MainFormBarber->Label8->
                  MainFormBarb
                  case 4: {MainFormBarber->Label8->
                  MainFormBarb
                  case 5: {MainFormBarber->Label8->
                  MainFormBarb
}
      dovol++;                
      Sleep(SLEEP_STR);       
//приостановка потока на 
//----------------------------
void __fastcall 
TMainFormBarber::FormDestroy(
{
//удаляемвсесемафоры
CloseHandle(customerSemaphore)
CloseHandle(barberSemaphore);
   
CloseHandle(mutex); 
}
//----------------------------
void __fastcall 
TMainFormBarber::clickClick(
{
      MainFormBarber->click->
//семафоры
      mutex=CreateSemaphore(
customerSemaphore = CreateSemaphore(NULL, 0, 1, NULL);
barberSemaphore = CreateSemaphore(NULL, 0, 1, NULL);
// потоки клиентов и парикмахера
      HANDLE 
threadCus[NUMBER_OF_CUSTOMERS]
HANDLE threadBar;
DWORD cusThreadId;
DWORD barThreadId;
for(int i=0;i< NUMBER_OF_CUSTOMERS;++i)
{
threadCus[i] = CreateThread(NULL, 0, customer, (LPVOID)i, 0, &cusThreadId);
}
threadBar = CreateThread(NULL, 0, barber, (LPVOID)1, 0, &barThreadId);
} 
В данной работе мы раскрыли вопрос о видах и свойствах алгоритмов.
В практической части курсовой работы мы рассмотрели одну из классических задач на синхронизацию потоков – задачу о спящем парикмахере и произвели решение этой задачи с использованием семафоров.