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);
}