Definición
Es una API de threads, dada por la biblioteca pthread. Esta API es muy completa y la iremos viendo a medida que se la necesite.
Creación de thread
Esta función tiene cuatro argumentos:
thread
: Es un puntero a la estructura de tipopthread_t
que se utiliza para interactuar con los threadsattr
: Se utiliza para especificar los ciertos atributos que el thread debería tener, por ejemplo, el tamaño del stack, o la prioridad del scheduling del thread. En la mayoría de los casos esNULL
start_routine
: Sea tal vez el argumento más complejo, pero no es más que un puntero a una función, en este caso que devuelvevoid
arg
: Es un puntero a void que debe apuntar a los argumentos de la función.
Devuelve
Ejemplo
Terminación de un thread
Muchas veces es necesario esperar a que un determinado thread finalice su ejecución, para ello se utiliza la función pthread_join()
que toma dos argumentos
thread
: es el thread por el que hay que esperar y es de tipopthread_t
value_ptr
: es el puntero al valor esperado de retorno
Ejemplo
Algunas cosas:
- Si solo devuelve un valor no hay que hacer el empaquetado de los puntero
- Nunca devolver nada que se encuentre alocado dentro del thread
pthread_exit(status
pthread_cancel(thread)
pthread_detach(threadid)
Locks
Lock y unlock
Las rutinas son bastante intuitivas, donde uno se imagina que puede haber una sección crítica, y por ende debe ser protegida, se utilizan los locks para ello.
Manejo de lock
Donde intenta bloquearlo, y devuelve error si el lock solicitado está todavía captado.
Si en un timeslice no consigue el mutex, devuelve error, o
Wait
Esta llamada en forma atómica
- Suelta el mutex haciendo unlock
- Suspende la ejecución del Thread que lo llama poniéndolo en la lista de espera
- Se vuelve a hacer lock del mutex antes de volver del wait
Signal
Toma a un thread de la lista de espera y lo marca como potencialmente seleccionable por el planificador para correr, lo pone en la ready list.
Broadcast
Este toma a todos los thread de la lista y los marca como seleccionables para correr.