.


:




:

































 

 

 

 


producer-consumer




, , 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. , , .





:


: 2016-10-23; !; : 938 |


:

:

.
==> ...

1576 - | 1552 -


© 2015-2024 lektsii.org - -

: 0.015 .