Está en la página 1de 4

Arquitectura y Sistemas Operativos

Tecnicatura Universitaria en Programación (TUP) – UTN FRBB


Profesor: Gustavo Ramoscelli

Trabajo Práctico Nº 2(a)


Procesos multihilados (multi-threads)
FECHA LÍMITE DE ENTREGA - Lunes 10/10 23:59hs

1- Objetivo y generalidades
2- Planteo
3- Clonado de repositorio TP2(a)
4- Ejecución de programa
5- Detección del problema
6- Corrección del problema
7- Entrega de TP2(a) pusheando a Github
1- Objetivo y generalidades

El objetivo de este práctico es ver algunas de las dificultades a las que nos enfrentamos al programar
procesos multihilados (o multi-threads).

Generalmente sucede que más de un hilo debe acceder a un recurso compartido, generando
carreras críticas, por lo que es necesario implementar algún mecanismo de control de acceso para
evitar fallas o funcionamientos inesperados.

2- Planteo

Vamos a suponer el siguiente escenario:

- Tenemos un programa que simula ser un “Big Six”


- Cada hilo de ejecución representaría un comensal (para simplificar solo tendremos 2 comensales)
- Los comensales son dos hermanos que se caracterizan por ser muy educados y comparten todo de
manera muy equitativa, por lo que deberían ir comiendo alternadamente por turnos de a una
hamburguesa cada uno
- Al finalizar las hamburguesas cada hermano debería haber comido la misma cantidad de
hamburguesas cada uno

- Un programador despistado (no vamos a decir quién) implementó un algoritmo que intenta modelar lo
enunciado anteriormente
- El código bigsix-con-hilos.c no estaría funcionando bien y eventualmente presenta fallas

3- Clonado del repositorio del TP2(a)

Acceder al siguiente link https://classroom.github.com/a/pNoYinsW

Para aceptar la asignación de la tarea se debe estar logueado a github, de esta manera la asignación
queda asignada al usuario

Similarmente al procedimiento mencionado en el TP1:


Ya en Linux creamos una nueva carpeta, luego ingresamos a dicha carpeta
Allí mismo procedemos a clonar el repo de la asignación
Cada estudiante tendrá un repositorio individual personal, no copiar la dirección de otra persona
4- Ejecución del programa

Compilamos el archivo bigsix-con-hilos.c haciendo:


gcc -o <nombre_archivodestino> bigsix-con-hilos.c –lpthread

–lpthread le indica al compilador que debe compilar teniendo en cuenta que se utilizan hilos de
ejecución en el código

./<nombre_archivodestino>

Realizar varias ejecuciones y realizar una captura de pantalla

5- Detección del problema

¿Qué problemas se puede ver a simple vista?


¿Qué nombre se le dá a esta falla que ocurre en el código que provoca que cada ejecución presente
resultados diferentes?

Describir y contestar estas cuestiones en un archivo de texto respuestas.txt

6- Corrección del problema

Corregir el programa en un nuevo archivo <nuevonombre_archivo.c> archivo para lograr que los
hermanos coman por turnos la misma cantidad de hamburguesas cada uno.

TIP: Para dicha corrección solo debe modificarse el método void *comer_hamburguesa(void *tid)
implementando la exclusión mutua con busy waiting utilizando turnos que se presentó en la clase
teórica (capítulo 2.3.3 del libro de Tanenbaum)
La salida del programa corregido, debería ser similar a lo siguiente:

Realizar una captura de pantalla con la ejecución del código modificado y corriendo correctamente

7- Entrega de TP2(a)

Realizar un PUSH al repositorio todas las capturas de pantalla realizadas, el archivo respuestas.txt, y el
código fuente <nuevonombre_archivo.c> del programa en C corregido.

También podría gustarte