Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Примитивы межпроцессного взаимодействия



Sleep()-блокирует текущий процесс

Wakeup(процесс)-разблокирует заданный процесс

Задача: производителя и потребителя:

Производитель:

Потребитель:

Задача: Семафор:

Семафор - некоторая целочисленная переменная над которой определены 2 операции:

P -операция (down())- если значение семафора равно 0, вызвавши процесс блокируется, иначе значение уменьшается на 1, а вызвавший процесс продолжается.

V-операция (up())-если на семафоре имеются заблокированные процессы, то один из них запускается, иначе значение семафора увеличивается на 1.

Любая операция с семафором исполняется как единое непрерывное (атомарное) действие. По этому операции с семафором реализуются с помощью системных вызовов.

Семафор mntex

Down(& mutex);

Критический область

Up(0 mutex)

Пример на Си:

#define N=100

Typedef int semaphore;

Semaphore mutex=1;

Semaphore empty=N

Semaphore empty=0

Void producer(void)

{

Int item;

While(1){

Item=producer.item();

Down(& empty);

Down(& mutex);

put_data(item);

up(& mutex);

up(& ful);

}

}

Void consumer(void)

{

Int item;

While(1){

Dawn(& full);

Down(& mutex);

Intem=get_dta()

Up(& mutex);

Up(& emptu);

}





Дата публикования: 2014-11-18; Прочитано: 406 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...