The document discusses threads at the kernel and user level. It describes threads as the basic unit of CPU utilization consisting of a program counter, register set, and stack space. Threads share code, data, and operating system resources with other threads in a process. The document compares single-threaded and multi-threaded processes and models including one-to-one, many-to-one, and many-to-many. It provides details on thread support in Solaris 2, including lightweight processes (LWPs), and basic thread management.
#include <pthread.h>
int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
pthread_create crea un hilo y lo coloca en la cola de hilos.
tid apunta al ID del hilo que se crea.
Los atributos del hilo se encapsulan en el objeto atributo al que apunta attr si este es null, el nuevo hilo tendrá los atributos por omisión.
start_routine, es el nombre de una rutina a la que el hilo invoca.
El parámetro que se le especifica a start_routine es arg.
#include <pthread.h>
void pthread_exit(void *value_ptr);
La función pthread_exit termina el hilo que la invoca.
El valor del parámetro value_ptr queda disponible para pthread_join.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_function(void *arg);
char message[] = "Hola mundo";
int main() {
int res;
pthread_t a_thread;
void *thread_result;
/* Aquí se crea el hilo */
res = pthread_create(&a_thread, NULL, thread_function, (void *)message);
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
printf("Esperando que el hilo termine...\n");
res = pthread_join(a_thread, &thread_result);
if (res != 0) {
perror("La unión del hilo ha fallado");
exit(EXIT_FAILURE);
}
printf("Hilo unido, regresó %s\n", (char *)thread_result);
printf("El mensaje es %s\n", message);
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg)
{
printf("la función del hilo está corriendo. El Argumento fué %s\n", (char *) arg);
sleep(3);
strcpy(message, "Adios!");
pthread_exit("Gracias por el tiempo del CPU");
}
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h> // Definen funciones para manejo de hilos
void *thread_function(void *arg); // Función donde inicia el hilo
int cont=0; // Es la misma para ambos hilos
// Global está en el segmento de datos
int main()
{
// Definición de variables
int res;
pthread_t a_thread; // Identificador del hilo
void *thread_result;
int i; // Es local, por lo tanto está en el segmento de stack de cada hilo
/* Aquí se crea el hilo */
res = pthread_create(&a_thread, NULL, thread_function,NULL);
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
// Hilo principal
for(i=1;i<=10;i++)
{
printf("%d\n",i);
cont++;
printf("Hilo principal dice cont=%d\n",cont);
sleep(1);
}
printf("Esperando que el hilo termine...\n");
// Esperar a que termine el hilo cuyo identificador es a_thread
res = pthread_join(a_thread, &thread_result);
if (res != 0)
{
perror("La unión del hilo ha fallado");
exit(EXIT_FAILURE);
}
printf("Hilo unido, regresó %s\n", (char *)thread_result);
exit(EXIT_SUCCESS);
}
// Función donde inicia la ejecución el hilo secundario
void *thread_function(void *arg)
{
int i; // Es local, por lo tanto está en el segmento de stack de cada hilo
for(i=10;i>0;i--)
{
printf("%d\n",i);
printf("Hilo secundario dice cont=%d\n",cont);
sleep(1);
}
pthread_exit("Gracias por el tiempo del CPU");
}