, , producer-consumer (-). . , . , .
Producer: | while(1) { produce_item; put_item; } |
Consumer: | while(1) { get_item; consume_item; } |
, , , . , . ? empty, full mutex. full , , . empty , mutex - , put_item get_item ( , ). :
Semaphore mutex = 1;
Semaphore empty = N, N ;
Semaphore full = 0;
Producer:
while(1) {
produce_item;
P(empty);
P(mutex);
put_item;
V(mutex);
V(full);
}
Consumer:
while(1) {
P(full);
P(mutex);
put_item;
V(mutex);
V(empty);
consume_item;
}
, . , : .
producer-consumer , , , , . , P, mutex, full empty. , , (mutex ), , . . , , . .
. , interleaving , . , 1974 (Hoare) , , . , .
|
|
, - . , . -, . , - , . :
monitor monitor_name {
;
void m1(...){...
}
void m2(...){...
}
...
void mn(...){...
}
{
;
}
}
m1,..., mn - , , : - - .
, , . . , . , , , , , . , , , .
, , . , full empty . (condition variables), wait signal, P V .
, , wait - . , wait, , , .
, - signal . , . signal , . , , , ? , , . (Hansen) : signal.
7.
|
|
, . , . , . , . , . . , , (deadlock) , , . , .
. , . , . (. . 7.1)
. 7.1. .
, . , , (. " "). , , . .. , , .
. - , , . , , . , , , . : , , , , 75%.
. , , . - , , , , . , - .
, , , . , - . , . , , , .
, , .
, .
, . , , , . - , , , . , , , .
, :
|
|
1. (request) ,
2. (use) ,
3. (release) .
, , . , , . : .
, , .
. request . - , - , . open. , , .