Está en la página 1de 10

THREADS

Sistemas Distribuidos

Alvaro Ospina Sanjuan Universidad Pontificia Bolivariana Medelln 2010

Threads - procesos livianos

Permiten hacer invocaciones de mtodos para que se ejecuten en forma paralela al pro rama principal! Permite tener varias ejecuciones dentro del mismo c"di o por lu ares diferentes# pero dentro del mismo proceso! $omparten datos con el pro rama principal Poseen su propio contador de pro rama# re istros % pila! $ompiten con el pro rama principal por el procesador! &ienen cam'ios de conte(to m)s r)pidos que los procesos! Si el pro rama principal termina# mata a todos los threads!

Estandar para threads POSIX


(Portable Operating Syste !or "#IX$

Inter!ace

int pthread%create( pthread%t &tid' const pthread%attr%t &attr' void & (&ro(tine$( void&$' void &arg$

pthread%e+it($* termina el hilo sin terminar el proceso pthread%)oin($* *sperar a que el thread termine! Pthread%sel!* +d del thread actual!

,o

pilaci-n* gcc .o e)ec(table -lpthread

!(ente/c

Hilos

pthread,t - es un puntero a un identificador de thread! pthread,attr,t - son los atri'utos de creaci"n del hilo! .a% varios atri'utos posi'les# como por ejemplo la prioridad! Se puede pasar /U00# con lo que el hilo se crear) con sus atri'utos por defecto# eneralmente es suficiente! void -1-21void -2 una funci"n que admite un puntero void - % que devuelve void -! *sta funci"n es la que se ejecutar) como un hilo aparte! *l hilo terminar) cuando la funci"n termine o cuando llame a la funci"n pthread,e(it12 1o que al uien lo mate desde otra parte del c"di o2! *s 'astante ha'itual hacer que esta funci"n se meta en un 'ucle infinito % quede suspendida en un sem)foro o a la espera de una se3al para hacer lo que ten a que hacer % volver a quedar dormida! void - es el par)metro que se le pasar) a la funci"n anterior cuando se ejecute en el hilo aparte! 4e esta manera nuestro pro rama principal puede pasar un 5nico par)metro 1que puede ser cualquier cosa# como una estructura compleja2 a la funci"n que se ejecutar) en el hilo! 0a funci"n del hilo s"lo tendr) que hacer el 6cast6 adecuado!

E)ercicios de threads

*jercicio 1 *jercicio 2 *jercicio 7 *jercicio 8

E)ercicio 0
9include:pthread!h; 9include:stdio!h; 9include:strin !h; // Funcion que ejecuta el hilo void - function,thr1char -cadena2< sleep1=2> printf16.ilo ?d@mi cadena es@ ?sAn6#pthread,self#cadena2> pthread,e(it1pthread,self2> B int main1void2< pthread,t id> printf16$reando thread !!!An62> char -cadenaCstrdup16so% un thread62> pthread,create1Did# /U00#1void -2Dfunction,thr# 1void -2 cadena2> printf16Ppal@ *sperando que el thread termine!!An62> pthread,join1id#/U002> printf16Ppal@ el thread terminoAn62> return 0> B

E)ercicio 1
9include:pthread!h; 9include:stdio!h; 9include:strin !h; //parametros de la funcion struct parametros< int num> char -cadena> B> // Funcion con varios parametros que llegan en un puntero a estructura void - function,thr1struct parametros -p2< printf16.ilo@numero ?d % mi cadena es@ ?sAn6#pE;num#pE;cadena2> pthread,e(it1pthread,self2> B int main(void){ FFse llena la estructura de parametros del metodo struct parametros param> param!cadenaCstrdup16so% un thread62> param!numC1=> FF se lanGa el thread pthread,t id> pthread,create1Did# /U00#1void -2Dfunction,thr# 1void -2 Dparam2> printf16Ppal@ *sperando que el thread termine!!An62> pthread,join1id#/U002> printf16Ppal@ el thread termino62> return 0> B

9include:pthread!h; 9include:stdio!h; 9include:stdli'!h; 9include:strin !h; 9define MAH,&.I*A4S 7 FF cantidad de threads que se lanGan struct parametros{ int num> char -cadena> B> pthread,t ta'la,thrJMAH,&.I*A4SK> FFarre lo con id de los threads struct parametros paramJMAH,&.I*A4SK> FFarre lo con los parametros de los threads //funcion que recibe un puntero a la estructura de parametros del thread void - function,thr1struct parametros -p2< printf16.ilo@numero ?d % mi cadena es@ ?sAn6#pE;num#pE;cadena2> pthread,e(it1pthread,self2> B int main(void){ printf16$reando threads !!!An62> int i> for1iC0>i:MAH,&.I*A4S>iLL2< paramJiK!cadenaCstrdup16so% un thread62> paramJiK!numCi> pthread,create1Dta'la,thrJiK# /U00#1void -2Dfunction,thr# 1void -2 DparamJiK2> B printf16Ppal@ *sperando que los threads terminen!!An62> for1iC0> i:MAH,&.I*A4S>iLL2< pthread,join1ta'la,thrJiK# /U002> printf16Ppal@ el thread ?d terminoAn6#i2> B printf16&odos terminaron!!!An62> return 0>

E)ercicio 2

9include:pthread!h; 9include:stdio!h; 9include:stdli'!h; 9include:unistd!h; 9include:time!h; int fila> FFMuarda el valor de la fila en am'as matrices void -sumavec1void -ar 2>FFNuncion encar ada de realiGar la suma de las matrices pthread,t tidJ=K> FFOectores de hilos int mataJ=KJ=K# mat'J=KJ=K> FF4eclaracion de matrices int resultadoJ=KJ=K> FFSuma de las matrices main(argc,argv){ int j#P#semilla> semillaC time1/U002> F-----Menerando matrices-----F srand1semilla2> for1jC0>j:C8>jLL2 for1PC0>P:C8>PLL2 mataJjKJPKC1Lrand12?11002> FFnumero aleatorio entre 0E100 for1jC0>j:C8>jLL2 for1PC0>P:C8>PLL2 mat'JjKJPKC1Lrand12?11002> FFnumero aleatorio entre 0E100 F---------------------------F FF$reando los hilos que van a sumar las matrices@ un hilo por fila for1jC0>j:C8>jLL2< printf16An$reando hilo fila ?d An6#j2> if1pthread,create1DtidJjK# /U00# sumavec# 1void -2j2QC02< printf16/o pude crear hilo fila ?d An6#j2> e(it112> B pthread,join1tidJjK#/U002> B

E)ercicio 3

E)ercicio 3 // contin(aci-n
FFSe imprimen las matrices printf16AnAn MatriG 162> for1jC0>j:C8>jLL2< printf16An62> for1PC0>P:C8>PLL2 printf16?d At6#mataJjKJPK2> B printf16AnAn MatriG 262> for1jC0>j:C8>jLL2 < printf16An62> for1PC0>P:C8>PLL2 printf16?d At6#mat'JjKJPK2> B printf16AnAn MatriG 71resultado262> for1jC0>j:C8>jLL2 < printf16An62> for1PC0>P:C8>PLL2 printf16?d At6#resultadoJjKJPK2> B B void sumavec(void arg){ int fila#col> filaC 1int2ar > sleep122> printf16Sumando fila ?d An6#fila2> for1colC0>col:C8>colLL2< resultadoJfilaKJcolKCmataJfilaKJcolKLmat'JfilaKJcolK> B pthread,e(it102> B

También podría gustarte