UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

11.5.6. Diseño de aplicaciones concurrentes (hilos)

Plan de trabajo

Sumamente satisfecho con su trabajo, SAUCEM le encarga dos aplicaciones concurrentes: par_impar_lista_conc y tabla_de_primos, con la siguiente especificación informal sobre éstas:

  1. Diseñe una aplicacion concurrente que lance dos hilos que realizan un procesamiento concurrente. El primero de ellos cuenta los números impares y el segundo los pares. Ambos trabajan sobre la siguiente lista de enteros descrita tal que así:

    struct lista_enteros{
     int dato_entero;
     struct lista_enteros* siguiente;      
     };    

    Adicionalmente tiene la siguiente información:

    1. El programa ha de crear una lista con 4 elementos para las pruebas (3,4,5,7). Con estos valores, el programa diría:

      $./par_impar_lista_con
      [Main] Hay 3 impar(es) y 1 par(es).
      	  

    2. El main ha de crear la lista, llamar a las hebras y esperar a que estas acaben de operar. Las hebras tras procesar el trabajo de la lista finalizan.

    3. La solución debe ser segura (sin interbloqueos ni condiciones de carrera). Tampoco puede usar ni un mutex ni variables de condición en su aplicación.

  2. Diseñe otra aplicación concurrente (tabla_de_primos_conc) que calcule el número de primos que hay en una tabla de tamaño fijo: M. El algoritmo que le piden implementar para saber si un número (n) es primo consiste en saber sólo es divisible por 1 y por él mismo.

    1. En el laboratorio, han propuesto que por cada posición del array debe de lanzarse una hebra POSIX. Tras finalizar todas, el programa principal imprimirá todos los números, espcificando si son primos o no, uno a uno.

    2. Para probar utilice el siguiente table: 1000331, 0, 3, 5, 7.