Ej 3 Practico 5

Ej 3 Practico 5

de Alvaro Roberto Larrea Molina -
Número de respuestas: 1
(a) ¿Cuál   es   el   resultado   de   intercambiar   las   instrucciones   P  del   procedimiento consumer_process
 en la solución al problema productor-consumidor que sigue?
R:si intercambiamos 1 por 2 , P(number_deposited) va quedar dentro de la seccion critica, con lo cual no deja agregar productos al buffer mientras no se haga la liberacion del semaforo,que solo en el caso que hubiera salido de la seccion critica del prductor y le quede el v(numer_deposited) por ejecutar.

(b) ¿Cuál   es   el   resultado   de   intercambiar   las   instrucciones   V del   procedimiento producer_process
 en la solución al problema productor-consumidor que sigue?
R:Funcionaria igual intercambiando 3 y 4

program producer_consumer_relationship;
  var  exclusive_access : semaphore;
       number_deposited : semaphore;
       buff : buffer;
  procedure producer_process;
    var next_result : integer;
  begin
    while true do
    begin
      calculate_next_result;
      P(exclusive_access);
      agrego_buffer(buffer, next_result);
     3 V(exclusive_access);
     4 V(number_deposited);

    end while;
  end procedure;
  procedure consumer_process;
    var next_result : integer;
  begin
    while true do
    begin
     1 P(number_deposited);
     2 P(exclusive_access);

      next_result := saco_buffer(buffer);
      V(exclusive_access);
      write(next_result
        end while;
  end procedure;

begin {programa principal}
  init(exclusive_access, 1);
  init(number_deposited, 0);
  init_buffer(buffer);
  cobegin
    producer_process;
    consumer_process;
  coend
end program.


En respuesta a Alvaro Roberto Larrea Molina

Re: Ej 3 Practico 5

de Martin Rocanova Nuñez -

Buenas, como estas? Tambien te puede pasar esto:

En el caso de intercambiar 1 y 2, y suponiendo la siguiente ejecución:

1) Se ejecuta consumer_process y se pasa por P(exclusive_access), dando paso y restando uno al valor del semáforo (quedando en cero), y luego queda bloqueado en P(number_deposited), ya que está inicializado en cero.

2) Luego, se ejecuta producer_process, quedando bloqueado en P(exclusive_access).

En conclusión, cada proceso queda esperando por eventos del otro, por lo que llegamos a una situación de DEADLOCK.

Saludos!