Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Cursos gratis / Curso de Ada - Tareas

Curso de Ada - Tareas

 ****- (11 opiniones)
GNU Free Documentation License Curso gratis de José Alfonso Malo Romero - 16 de Marzo de 2006
Temas Relacionados: Programación estructurada
52. Tareas

En Ada, a la unidad de proceso secuencial que puede ser ejecutada paralelamente se le denomina task. Es la representación explícita de un proceso (o tarea).

Como en otras construcciones, la tarea de Ada presenta una especificación (interfaz con el exterior) y un cuerpo (descripción del comportamiento dinámico).

La sintaxis de la especificación de una tarea es:

especificación_tarea ::=
   task identificador [ is
     { punto_entrada_tarea | cláusula_representación }
   [ private { punto_entrada_tarea | cláusula_representación } ]
   end [ identificador ] ] ;
 punto_entrada_tarea ::=
   entry identificador [ ( tipo | rango ) ] [ ( parámetro { , parámetro } ) ] ;
 

La sintaxis del cuerpo de una tarea es:

cuerpo_tarea ::=
   task body identificador is
     [ parte_declarativa ]
   begin
     secuencia_de_sentencias
   end [ identificador ] ;
 

Por ejemplo, dos procesos que escriben un texto por pantalla:

procedure Tareas_tontas
 
   task Tarea1;
   task Tarea2;
 
   task body Tarea1 is
   begin
     loop
       Put ("Soy la tarea 1.");
     end loop;
   end Tarea1;
 
   task body Tarea2 is
   begin
     loop
       Put ("Soy la tarea 2.");
     end loop;
   end Tarea2;
 
 begin
   -- En este momento comienzan a ejecutarse ambas tareas.
   Put ("Soy el procedimiento principal.");
 end Tareas_tontas;
 

En este caso, el orden de los mensajes que aparecen en pantalla es totalmente impredecible, depende del sistema en el que se ejecuten. Ni siquiera es predecible si las frases que vayan apareciendo serán completas o serán truncadas, esto es debido a que el sistema puede decidir suspender la ejecución de alguna tarea en cualquier instante de tiempo y la sentencia Put no es atómica. Ambas tareas comenzarán su ejecución simultáneamente (al menos lógicamente) justo después del begin del procedimiento.

 

Ciclo de vida y tipos

Una tarea Ada puede cambiar de estado cuando se cumplen ciertas condiciones que dependen de si es estática o dinámica.
Una tarea Ada puede cambiar de estado cuando se cumplen ciertas condiciones que dependen de si es estática o dinámica.

Hay dos tipos de tareas, según su ciclo de vida:

  • Tareas estáticas:
    • Dependen del bloque donde se declaran.
    • Se activan justo antes de que se ejecuten las instrucciones del bloque donde fueron declaradas.
    • Terminan cuando todas sus tareas hijas terminen y llegue a su última instrucción.
  • Tareas dinámicas (mediante punteros):
    • Dependen del bloque donde se define el tipo puntero.
    • Se activan con la sentencia new.
    • Las tareas hijas pueden seguir existiendo cuando se termine su progenitora.

Existen atributos asociados a las tareas, entre otros:

  • Tarea'Callable indica falso si la tarea está completada o terminada, en otro caso (ejecutándose o suspendida), verdadero.
  • Tarea'Terminated indica verdadero si la tarea ha terminado.

Indicar tan sólo, que una tarea se puede terminar abruptamente mediante la sentencia abort y para redirigir una llamada a un punto de entrada que esté encolada hacia otra cola, se emplea la sentencia requeue.

 

Ejemplo

Para un sistema de control y temperatura, se puede realizar el control de ambas magnitudes simultáneamente:

with Paquete_control_temperatura; use Paquete_control_temperatura;
 with Paquete_control_presión; use Paquete_control_presión;
 
 procedure Control_temperatura_y_presión
 
   task Control_temperatura;
   task Control_presión;
 
   task body Control_temperatura is
     Temperatura: TTemperatura;
     Temperatura_referencia: TTemperatura := 55;
     AcciónCalefactor: TAcciónCalefactor;
   begin
     loop
       Temperatura := Leer;
       AccciónCalefactor := Control (Temperatura, Temp_referencia);
       Escribir (AcciónCalefactor);
       delay (2.0);
     end loop;
   end Control_temperatura;
 
   task body Control_presión is
     Presión: TPresión;
     Presión_referencia: TPresión := 315;
     PosiciónValvula: TPosiciónVálvula;
   begin
     loop
       Presión := Leer;
       PosiciónVálvula := Control (Presión, Presión_referencia);
       Escribir (PosiciónVálvula);
       delay (3.0);
     end loop;
   end Control_presión;
 
 begin
   -- Comienzan a ejecutarse Control_temperatura y Control_presión;
   null; -- Un cuerpo de procedimiento no puede estar vacío.
 end Control_temperatura_y_presión;
 

En el preciso instante en el que comienza a ejecutarse el procedimiento, hay tres procesos ejecutándose simultáneamente, el procedimiento y las dos tareas.

 

Manual de referencia de Ada

 
Tabla de contenidos
  1. 1 - Introducción
  2. 2 - Historia
  3. 3 - Manual de referencia
  4. 4 - Instalación
  5. 5 - Hola Mundo
  6. 6 - Elementos del lenguaje
  7. 7 - Tipos
  8. 8 - Enteros
  9. 9 - Enumeraciones
  10. 10 - Coma flotante
  11. 11 - Coma fija
  12. 12 - Arrays
  13. 13 - Strings
  14. 14 - Registros
  15. 15 - Registros discriminados
  16. 16 - Registros variantes
  17. 17 - Punteros a objetos
  18. 18 - Punteros a subprogramas
  19. 19 - Tipos derivados
  20. 20 - Tipos etiquetados (orientación a objetos)
  21. 21 - Subtipos
  22. 22 - Objetos (variables y constantes)
  23. 23 - Atributos
  24. 24 - Expresiones
  25. 25 - Operadores
  26. 26 - Sentencias y estructuras de control
  27. 27 - Subprogramas
  28. 28 - Sobrecarga
  29. 29 - Entrada/salida
  30. 30 - Pragmas
  31. 31 - Interfaz con otros lenguajes
  32. 32 - Diseño y programación de sistemas grandes
  33. 33 - Paquetes
  34. 34 - Clausula use
  35. 35 - Clausula with
  36. 36 - Paquete Standard
  1. 37 - Declaraciones
  2. 38 - Ámbito
  3. 39 - Visibilidad
  4. 40 - Renombrado
  5. 41 - La biblioteca Ada (unidades y subunidades)
  6. 42 - Unidades de biblioteca
  7. 43 - Unidades hijas
  8. 44 - Subunidades
  9. 45 - Compilación separada y dependiente
  10. 46 - Tipos abstractos de datos
  11. 47 - Tipos limitados
  12. 48 - Unidades genéricas
  13. 49 - Excepciones
  14. 50 - Paquete Ada.Exceptions
  15. 51 - Concurrencia
  16. 52 - Tareas
  17. 53 - Sincronización de tareas mediante puntos de entrada o citas (entry)
  18. 54 - Aceptación de citas (accept)
  19. 55 - Selección de citas (select)
  20. 56 - Llamadas a punto de entrada complejas
  21. 57 - Tareas dinamicas: creación dinamica de tareas (tipos t
  22. 58 - Dependencia de tareas
  23. 59 - Ejemplos de tareas
  24. 60 - Programación distribuida con GLADE
  25. 61 - Novedades de Ada 2005
  26. 62 - Unidades predefinidas
  27. 63 - Paquete Ada.Strings.Fixed
  28. 64 - Paquete Ada.Strings.Unbounded
  29. 65 - Paquete Ada.Text_IO
  30. 66 - Paquete Ada.Text_IO.Editing
  31. 67 - Paquete Ada.Float_Text_IO
  32. 68 - Paquete Ada.Sequential_IO
  33. 69 - Paquete Ada.Command_Line
  34. 70 - Paquete Interfaces
  35. 71 - Recursos en la Web
Autor y licencia de 'Curso de Ada - Tareas'
José Alfonso Malo Romero Extraído de: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Ada_/_Introducci%C3%B3n GNU Free Documentation License
El contenido está disponible bajo los términos de GNU Free Documentation License
Licencia GNU Free Documentation License: http://www.gnu.org/copyleft/fdl.html
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Curso de Ada - Tareas'

Excelente curso de iniciación a la astronomía para aquellos que quieran aprender sobre esta apasionante... Más »
La idea de este curso surgió de varias conversaciones entre amig@s de la cuadrilla y... Más »
Este es un curso tremendamente completo, guiado y con ejemplos y prácticas pensadas para convertirlo... Más »
Este tutorial presenta los conceptos básicos de líneas de transmisión (Transmission lines), así como una... Más »
Publicidad, término utilizado para referirse a cualquier anuncio destinado al público y cuyo objetivo es... Más »
Gente Wiki
Carlos Raul Lopez Reatiga
Soy maestro en el centro de estudio de idiomas de la universidad autónoma de sinaloa, méxico. Imparto la materia de...
Juan Pablo Velasco Moncayo
Médico ecuatoriano curso la maestria en seguridad laboral y riesgos del trabajo. Me encantaria conocer profesionales que me puedan apoyar...
Pediatría, Urología,...
Katzuhiko Minohara Corona
Puedo contestar preguntas que hagan sobre 1. - kaizen 2. - bolsa mexicana de valores 3. - budismo.
Restaurantes
Jorge_moreno
Periodista e historiador. Ha ejercido la docencia universitaria como profesor de nuevas tecnologias.
Alejandro Montes
Trabajo en empresas de ingeniería en el sector energía, normalmente en la especialidad de tuberías. Soy usuario destacado (creo y...
German Pomares Herrera
Escribo para televisión, diarios (el dinosaurio de papel), radio y publicidad (de algo hay que comer). En ocasiones me daba...
Campañas publicitarias, Imagen corporativa,...
Suscribirse
¿Estás seguro de que deseas eliminar este capítulo?