Bueno, tengo dos problemas diferentes: No entiendo mucho de ADA, pero necesito tener esto terminado. Estoy tratando de simular el problema de los lectores y escritores, el típico de la concurrencia y la exclusión. Y el problema del productor/consumidor.
El de los lectores y escritores tengo el código, que ni siquiera compila. Y que adjunto a ver si alguien puede ayudarme.
En el caso del productor/consumidor, no tengo el código, tengo la implementación de un buffer circular y el código del productor/consumidor para cuando el buffer es de tamaño 1. Supongo que uniendo esas dos cosas voy a tener el caso del productor/consumidor para un buffer de tamaño, n, no sé, necesito orientación. Si quieren puedo subir los códigos del buffer circular y el del buffer de tamaño 1, no sé...
Espero que puedan ayudarme. Desde ya les estoy muy agradecida.
--LECTORES Y ESCRITORES
procedure Lectores_Y_Escritores is
procedure Lector(Valor_Leido:out Integer) is separate;
Escritor(Valor_Escrito:in Integer);
entry Comenzar_Lectura;
entry Lectura_Terminada;
begin
null;
end;
procedure Lector(Valor_Leido:out Integer) is
begin
Comenzar_Lectura;
Valor_Leido := Var_Compartida;
Lectura_Terminada
end
task body Lectores_Y_Escritores is
Var_Compartida:Integer;
Lectores:Integer = 0;
begin
accept Escritor(Valor_Escrito:in Integer) do
Var_Compartida:=Valor_Escrito
end;
loop
select
when Escritor'Count=0 accept Comenzar_Lectura;
Lectores:=Lectores+1;
or accept Lectura_Terminada;
Lectores=Lectores-1;
or when Lectores=0;
accept Escritor(Valor_Escrito:in Integer) do
Var_Compartida:=Valor_Escrito;
end;
loop
select
accept Comenzar_Lectura
Lectores=Lectores+1
else exit
end select
end loop
end select
end loop
end Lectores_Y_Escritores