Está en la página 1de 2

COMO TRABAJAR CON HEBRAS

D. Sc. Dennis Barrios Aranibar


dennisbarrios@gmail.com
1. Qiero crear !ebras en mi "rograma# $A!ora %e !ago&
Crear hebras se puede ver como subdividir tu programa en varios frentes de
ejecucin, lo que debes hacer es usar alguna instruccin que haga este trabajo
por ti, como se muestra en la siguiente figura:
Entonces, a partir de la lnea donde se llama a la funcin crear hebra, el
programa se ha dividido en dos, y solo va a terminar cuando ambas hebras
terminen. La lnea siguiente a la funcin crearebra continuar! ejecut!ndose
normalmente y por otro lado la funcin proceso tambi"n comen#ar! a ejecutarse,
ambas hebras $la original y la reci"n creada% estar!n ahora compitiendo por los
recursos y por el procesador.
Entonces si lo que quieres es una funcin que haga esto lo puedes hacer asi:
En C/C++ sobre linux y usando el estndar POSSIX threads
(pthreads)
En el main, o en la funcin que dar! origen a la nueva hebra deber!s usar
la siguiente funcin con & par!metros:
int pthread'create$pthread't (restrict thread,
const pthread'attr't (restrict attr,
void ($(start'routine%$void(%,
void (restrict arg%)
Esta funcin solo va a ser reconocida si incluyes la biblioteca pthread.h
Los par!metros son:
thread *+ puntero a una variable del tipo pthread't que tu debes
crear pues alli se va a almacenar el ,- de tu hebra
attr *+ puntero a una variable del tipo attr't que tu puedes crear si
deseas modificar los atributos est!ndar de una hebra. Entre los
atributos podemos encontrar detachstate $si es independiente o
no%, guardsi#e $area de resguardo de la pila%, inheritsched $se
heredan o no politicas de planeamento%, schedparam $una
estructura de tipo sched'param donde se puede configurar la
prioridad del proceso%, schedpolicy $para cambiar la estrategia de
planificacin que el sistema operativo usa en la hebra%, scope $si
el proceso va a competir con las hebras de su propio proceso o
con los procesos de todo el sistema%, stac.addr $especifica la
void main$%/
0
crearebra$0%
0
1
void proceso$%/
0
2utinas
0
1
direccin donde ser! creada la pila de la hebra, el tama3o es
452E6-'756C8'9,:%, stac.si#e $especifica el tama3o
mnimo de la pila%
start_routine *+ puntero a una funcin que tu debes crear de la
forma void funcion $parametro%, el par!metro puede ser tanto un
tipo de dato simple como un compuesto $objetos o estructura%.
arg *+ el par!metro de nuestra funcin, lo recibe como void (
porque puede ser cualquier tipo de dato.
Es importante que a la hora de compilar le avises al compilador que use
la biblioteca del 4;77,< threads para construir tu ejecutable, entonces
debes incluir =lpthreads en tu ma.efile o tu lnea de compilacin, por
ejemplo g>> programa? =o prog? *lpthreads
En C/C++ sobre indos y usando el estndar POSSIX threads
(pthreads)
'.

También podría gustarte