• Sábado 21 de Diciembre de 2024, 10:58

Autor Tema:  Lectores, Escritores, Productor Y Consumidor  (Leído 8862 veces)

Luckita

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Lectores, Escritores, Productor Y Consumidor
« en: Miércoles 11 de Mayo de 2005, 04:58 »
0
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. :)


Código: Text
  1.  
  2. --LECTORES Y ESCRITORES
  3.  
  4. procedure Lectores_Y_Escritores is
  5.    
  6.    procedure Lector(Valor_Leido:out Integer) is separate;
  7.    Escritor(Valor_Escrito:in Integer);
  8.    entry Comenzar_Lectura;
  9.    entry Lectura_Terminada;
  10.  
  11. begin
  12.       null;
  13. end;
  14.  
  15. procedure Lector(Valor_Leido:out Integer) is
  16. begin
  17.    Comenzar_Lectura;
  18.    Valor_Leido := Var_Compartida;
  19.    Lectura_Terminada
  20.       end
  21.      
  22.    task body Lectores_Y_Escritores is
  23.       Var_Compartida:Integer;
  24.       Lectores:Integer = 0;
  25.    begin
  26.       accept Escritor(Valor_Escrito:in Integer) do
  27.          Var_Compartida:=Valor_Escrito
  28.          end;
  29.          
  30.       loop
  31.          select
  32.             when Escritor'Count=0 accept Comenzar_Lectura;
  33.             Lectores:=Lectores+1;
  34.             or accept Lectura_Terminada;
  35.             Lectores=Lectores-1;
  36.          or when Lectores=0;
  37.             accept Escritor(Valor_Escrito:in Integer) do
  38.                Var_Compartida:=Valor_Escrito;
  39.             end;
  40.             loop
  41.                select
  42.                   accept Comenzar_Lectura
  43.                      Lectores=Lectores+1
  44.                   else exit
  45.                   end select
  46.                end loop
  47.             end select
  48.          end loop
  49.       end Lectores_Y_Escritores
  50.  
  51.  

Gneuromante

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
    • http://www.canalada.org/
Re: Lectores, Escritores, Productor Y Consumidor
« Respuesta #1 en: Miércoles 11 de Mayo de 2005, 21:54 »
0
Los entry no los puedes declarar dentro de un procedure tienen que estar declarados dentro de una task.

Una buena fuente de información:

http://es.wikibooks.org/wiki/Programaci%C3...en_Ada_/_Tareas
Gneuromante.
Nos vemos en http].

Luckita

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Lectores, Escritores, Productor Y Consumidor
« Respuesta #2 en: Jueves 12 de Mayo de 2005, 00:44 »
0
Gracias.
La verdad es que sé que el código está mal, obviamente...
Ahora me gustaría si alguien me pudiera decir cómo hacer el problema de Lectores y Escritores... Sé que tiene que haber un task Escritor, un task Lector, y otro task, que posiblemente sea el que controla cómo leen y escribe o algo así, no sé. Espero que alguien me pueda ayudar.  :(