Vous êtes sur la page 1sur 5

Resumen

Introduccin.

Marco terico Objetivo de la prctica.


Experimentar con Threads sincronizados va mutex, mediante la ejecucin de un programa base que servir de ejemplo para poder implementar un programa con ciertas modificaciones utilizando lectores y escritores, todo esto servir para entender el adecuado funcionamiento de los thread mediante la sincronizacin va mutex.

Practica de laboratorio.
Parte 1.
Se tendr que ejecutar el programa base, el cual servir como ejemplo y gua para poder tener una clara idea de cmo se implementa. Este cdigo lo que va a realizar es el mtodo de la suma es decir cada vez que un mutex se ejecute este va a ir incrementando en uno esta cantidad. Es decir tenemos 4 hilos diferentes en cada hilo se va a ejecutar la operacin de x=x+1 y as sucesivamente hasta terminar con todos los hilos declarados. A continuacin se explicar la codificacin. Con esta sentencia se especificara el nmero exacto de threads que se va a crear. F1 Declararemos todas las variables globales que el programa necesita para ejecutarse. X= variable global compartida entre los threads. Mutexsum= ser un mutex global, es una variable de tipo mutex. callThd= variable para crear threads. F2

Es la funcin suma, es la que realizar el proceso de sumar los valores de la variable x, en esta funcin tenemos que el protocolo de entrada y el protocolo de salida, con el lock se abre el camino para el thread mediante la direccin del mismo, en la seccin critica se va a implementar lo que se necesita que realice la funcin en s, el unlock cierra el camino del thread de igual forma mediante la direccin de la misma. F3 Es el programa inicial, en donde se va a realizar la llamada a la funcin suma, tambin se va a inicializar el mutex, se utilizar la sentencia joinable para comprobar si el proceso est activo o en ejecucin y as poder realizar la suma, mientras que el status me servir para unir los joinable y realizar la operacin. F4 Para finalizar se imprimir los resultados del proceso, y luego se eso mediante el comando destroy se destruir el mutes y se limpiara la memoria. F5 Cdigo. Ejecucin. Una vez realizada la ejecucin del programa vamos a obtener el siguiente resultado: Fig 13 Para poder ejecutar el programa es necesario escribir: cc base.c -l pthread -o base.exe, mediante este comando se hace la llamada a las libreras de pthread para poder ejecutar los programas.

Parte 2.
Se realizar un programa que simule un esquema de 10 lectores y escritores. El objetivo de esta seccin es poder simular un programa en el que los lectores tienen prioridad hacia los escritores. El cdigo base con el que va a funcionar ser el siguiente: Integer readcount; (inicializar con cero) Semaphore m,w; (inicializado con 1) LECTOR P(m) Readcount := readcount +1; If readciunt =0 them P(w); V(m)

Seccin critica de lectura P(m) Readcount :=readcount -1; If readcount =0 them V(w); ESCRITOR P(w); Seccin critica de escritura V(w); Este seudocdigo ser modificado para que los lectores tengan prioridad con los escritores, una vez modificado en la seccin critica del lector se imprimir la letra x, mientras la seccin critica del escritor va a ser el valor de x=x+1. A continuacin se explicar el cdigo que se implemento para poder realizar el programa modificado: Primero se tendr que modificar la cantidad de threads que voy a definir; en este caso se tiene que modificar a 10. Fig.6 El siguiente paso ser declara las variables globales. En este caso tendremos dos, la variable x que servir apara realizar las operaciones dentro del programa principal, y la variable readcount que servir de ayuda para poder realizar las operaciones dentro de las funciones lector y escritor. Fig7 El siguiente paso es declarar los threads que vamos a necesitar para poder desarrollarlas e implementar las funciones necesarias para que el programa se ejecute de forma correcta. Fig 8 Ahora vamos a crear la funcin ESCRITOR esta funcin es la que me va a permitir escribir en los threads creados, dentro de esta funcin la seccin critica va a consistir en x=x+1. Siempre vamos a abrir y cerrar el camino de los threads mediante la sentencia lock y unlock con la respectiva direccin del mutex declarado. Fig. 9 Ahora vamos a crear la funcin del LECTOR, esta funcin es la que me va a permitir leer el thread creado, en esta funcin tambin se va a declara la prioridad que el lector tiene sobre el escritor. La

seccin crtica del LECTOR va a ser la impresin del valor que tiene x, la asignacin de la prioridad se realiza mediante el cdigo if y su respectiva asignacin. Fig 10. Dentro del programa principal tenemos que imprentar la llamada a las diferentes funciones que ya hemos declarado en la parte superior del cdigo. Eso se lo realiza mediante la implementacin de un for donde se realiza la llamada de las funciones lector y escritor. Fig 11

Para finalizar; la ltima modificacin del cdigo base que tenemos es la destruccin de los mutex que declaramos para de esta forma poder limpiar la memoria. Fig. 12 Cdigo Ejecucin Una vez realizada la ejecucin del programa vamos a obtener el siguiente resultado: Corrida 1. Fig 14 Corrida 2. fig 15 Para poder ejecutar el programa es necesario escribir: cc base1.c -l pthread -o base1.exe, como podemos observar todas la corridas de escritorio van a ser diferentes ya que depender de la prioridad que tenga el lector sobre el escritor.

Conclusiones y recomendaciones
El programa base sirve como gua para la adecuada implementacin de mutex, ya que en l se presentan cosas bsicas y fundamentales que ayudarn a guiar en la futura realizacin de nuevos programas que tengan que ver con el tema de mutex. En el momento de ejecutar el segundo programa, se nos desplegar el resultado el cual va a mostrar 10 valores diferentes, mediante el anlisis de estos valores podemos concluir que no siempre se me van a desplegar los mismos valores ya que estos dependern de de si el lector ya no se est ejecutando y es ah cuando el escritor ya se puede ejecutar.

Se podr asumir que el programa se esta ejecutando de forma correcta cuando el ultimo valor que se imprima se a 10, ya que 10 son los lectores y escritores que se van a ejecutar, el programa aun que sea en la ltima sentencia tiene que dejar que el escritor intervenga, es por eso que un forma de asegurar que el programa se esta ejecutando de forma correcta es verificar si la ultima impresin es 10, sin importar los valores que se impriman con anterioridad. A pesar de que la variable global este declarada como cero, el lector si va a tener algo que leer, por ejemplo si una cartelera de un lugar esta vaca no se puede decir a las personas que no pueden pasar por que la cartelera esta vaca, simplemente las personas van a pasar pero no van a leer nada. Es muy similar lo que ocurre aqu, los lectores van a pasar sin leer nada ms que el cero, hasta que los escritores tengan la oportunidad de ejecutarse y escribir algo.

Bibliografa

Vous aimerez peut-être aussi