Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Distribuidos
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!
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
!(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
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