Está en la página 1de 3

PRÀCTICA 3 : SINCRONIZACIÓN PTHREADS

SISTEMAS CONCURRENTES Y PARAL·LELOS

AHMED AZZAMOURI Y MARC SAUREU


CURSO 2019/20
Introducción

En esta práctica se nos pide implementar la aplicación que se implementó en la práctica 1 pero
en esta práctica utilizaremos los mecanismos de sincronización que nos aporta los pthreads.

Implementación

Para llevar a cabo el objetivo de sincronizar los hilos, hemos creado una variable global de tipo
semáforo y variables globales que utilizaremos para la sincronización de los hilos. Las
funciones que hemos modificado respecto a la práctica 1 son: CalcularCercaOptima,
CridarCombOpt, CalcularCombinacionOptima y una parte del main para que el código tuviera
coherencia con las funciones.

A continuación, hablaremos de los cambios que hemos establecido en las funciones ya


habladas anteriormente.

CalcularCercaOptima

Es la misma función que tratamos en la práctica 1 pero en esta implementación hacemos uso
de mecanismos de sincronización. Para la sincronización utilizamos un mutex y un integer
llamado sincro; si la variable sincro es menor que el número de hilos de la aplicación, entonces
vamos obteniendo el Optimo Parcial de cada hilo. En el momento que la variable sincro no sea
menor que el número de hilos, entonces destruimos el semáforo, destruimos la barrera, la cual
hablaremos después, y destruimos el mutex.

CridarCombOpt

Esta función la utilizamos para hacer un llamado a la función CalcularCombinacionOptima para


ir calculando el Optimo de cada hilo. También en esta función utilizamos mecanismos de
sincronización como el mutex que utilizaremos para el trabajo de los hilos, también en esta
función aumentaremos el valor de la variable sincro ya hablada.

CalcularCombinacionOptima

En esta función la utilizamos para calcular la combinación óptima de cada hilo, cada hilo puede
hacer 25000 combinaciones como máximo, al final cuando todos los hilos han acabado sus
25000 combinaciones muestran las estadísticas de estas combinaciones.
Para la sincronización de los hilos utilizamos un semáforo el cual utilizamos para obtener el
Optimo Parcial Global de cada hilo.

Resultados de la ejecución

A continuación, os mostraremos en forma de gráfica las diferentes ejecuciones del programa


con diferente número de hilos y con 3 procesadores.

Ejecución concurrente
25

20

15

10

0
1 Hilo 2 Hilos 4 Hilos Secuencial

NºHilos

Como podemos ver hay una cierta mejora entre las 3 ejecuciones concurrentes en
comparación a la ejecución secuencial de la aplicación

También podría gustarte