АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Код программы

Читайте также:
  1. I. Системные программы.
  2. II. Требования к результатам освоения основной образовательной программы начального общего образования
  3. III. Требования к структуре основной образовательной программы начального общего образования
  4. IV. Требования к условиям реализации основной образовательной программы начального общего образования
  5. Алгоритм компъютерной программы для выполнения лабораторной работы
  6. Алгоритм работы программы для выполнения лабораторной работы
  7. Анализ выполнения производственной программы.
  8. Анализ реализации республиканской целевой программы «Развитие внутреннего и въездного туризма в Республике Бурятия на 2011-2016 годы»
  9. Анализ формирования и выполнения производственной программы
  10. В Turbo Pascal строки программы могут иметь максимальную длину в 126 символов.
  11. Вопрос: проблемно целевые программы.
  12. Вредоносные программы

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <windows.h>

#include <process.h>

#define STACK_SIZE 4096

 

HANDLE hthread;

 

typedef struct horseinfo// все, что касается лошадей

{

HANDLE hmtx;

BOOL hflag; // лошадиный флаг

int dest; // номер города

};

 

struct horseinfo horses[48]; //массив лошадей

 

typedef struct maninfo // для пассажиров

{

HANDLE mmtx;

int dest;

};

 

struct maninfo mans[30];

 

int BornNum; //Общая область для всех потоков

int BornHorseDest; //Город, в котором рождается лошадь

int BornCowboyDest; // Город, где рождается ямщик

int BornCowboyNumber; // Номер ямщика, с которым он рождается

 

void horsethread(void *arg) // Данная функция отвечает за лошадей

{

int num=BornNum;

printf("%d horse in the town ",num);

printf("%d\n",horses[num].dest);

while (TRUE)

{

printf("Horse %d is ready \n ",num);

while (horses[num].hflag) {}

Sleep(300);

while (!horses[num].hflag) {}

WaitForSingleObject(horses[num].hmtx, INFINITE); // лошадь спит

printf("Horse %d is sleep \n",num);

Sleep(2000);

ReleaseMutex(horses[num].hmtx); //лошадь просыпается

}

}

 

void cowboythread(void *arg) // Данная функция отвечает за ямщиков с пассажирами

{

int i = 0;

int num=BornCowboyNumber;

int dest=BornCowboyDest;

int next=0;

 

int countmans=3;

int j=0;

int k=0;

int currentman=0;

 

srand(time(NULL));

next=(rand()%7)+1;

printf("Cowboy in the town ");

printf("%d Destination ",dest);

printf("Next is %d\n",next);

while (TRUE)

{

for (i=0;i<=48;i++)

{

if (horses[i].dest==dest)

{

WaitForSingleObject(horses[i].hmtx, INFINITE);

printf("Cowboy %d going to the \n",num);

printf(" %d",next);

horses[i].hflag=FALSE;

for (j=0;j<=32;j++)

{

if (mans[j].dest==dest)

{

WaitForSingleObject(mans[j].mmtx, INFINITE);

printf("Cowboy %d get passager",num);

printf("%d\n",j);

currentman=j;

}

}

printf("Cowboy %d get horse",num);

printf("%d\n",i);

Sleep(300);

horses[i].dest=next;

dest=next;

mans[j].dest=dest;

printf("Cowboy %d ",num);

printf("in the %d\n",dest);

srand(time(NULL));

next = (rand()%7)+1;

horses[i].hflag=TRUE;

printf("Cowboy %d push horse",num);

printf("%d\n",i);

mans[currentman].dest=dest;

ReleaseMutex(mans[currentman].mmtx);

ReleaseMutex(horses[i].hmtx);

i=48;

}

}

}

}

 

HANDLE horsesmutex;

 

void main(void)

{

void cowboythread(void *arg);

void horsethread(void *arg);

unsigned long threadid;

 

//Born horses

int i,k,j;

k=0; i=0; j=0;

horsesmutex=CreateMutex(NULL, FALSE, NULL);

srand(time(NULL));

for (i=1; i<=8; i++)

{

for (j=1; j<=6; j++)

{

mans[k].dest=i;

mans[k].mmtx = CreateMutex(NULL, FALSE, NULL); // инициализируется семафор

}

}

k=0;

for (i=1; i<=8; i++)

{

for (j=1; j<=6; j++)

{

horses[k].dest=i;

horses[k].hflag=TRUE;

horses[k].hmtx = CreateMutex(NULL, FALSE, NULL); // инициализируется семафор

BornNum=k;

hthread=(HANDLE)_beginthreadNT(horsethread, STACK_SIZE, NULL, NULL, 0, &threadid); //запускает лошадь

k++;

Sleep(200);

}

}

 

//Born cowboys

for (i=1;i<=8;i++)

{

for (j=1; j<=4;j++)

{

BornCowboyDest=i;

BornCowboyNumber=j;

hthread=(HANDLE)_beginthreadNT(cowboythread, STACK_SIZE, NULL, NULL, 0, &threadid); //запускаем ямщиков

Sleep(20);

}

}

while (TRUE) {} //вечный цикл

}

 


1 | 2 | 3 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)