Информатика и технология программирования


         

В заключение приведем пример решения


}
}}

void V(int *sem) // Увеличить семафор

{ RUN++; (*sem)++; RUN--; // Выйти (с переключением процессов)

NOCLOCK++; geninterrupt(TIMVEC);
}
В заключение приведем пример решения классической задачи " поставщик - потребитель" , взаимодействующих через общий циклический буфер .

&#35define N 5 // Размер буфера

&#35define TW 18*2 // Время " работы" потребителя

int EMPTY=N, // Семафор " БУФЕР ПОЛОН"

FULL=0, // Семафор " БУФЕР ПУСТ"

SEMBUF=1; // Семафор " ОПЕРАЦИЯ С БУФЕРОМ"

int fst=0,lst=0; // Циклическая очередь

char BUFF[N];

void consume() // Процесс - потребитель

{ while(1)
{ WAIT(TW); // Процесс " работает"

P(&#38FULL); // P(Буфер не пуст)

P(&#38SEMBUF); // P(Операция с буфером )

char s=BUFF[fst]; // Получить из буфера

fst=(fst+1)%N; // и вывести

textbackground(BLUE);
putch(s);
V(&#38SEMBUF); // V(Операция с буфером )

V(&#38EMPTY); // V(Буфер не полон )

}}

void produce() // Процесс - производитель

{ while(1)
{
if (kbhit()) { // Если есть ввод

char c=getch();
textbackground(BLACK);
putch(c);
if (c=='\r') STOP++;
P(&#38EMPTY); // P(Буфер не полон )

P(&#38SEMBUF); // P(Операция с буфером )

textbackground(MAGENTA);
putch(c);
BUFF[lst]=c; // Поместить в буфер

lst=(lst+1)%N;
V(&#38SEMBUF); // V(Операция с буфером )

V(&#38FULL); // V(Буфер не пуст )

}}}


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий