/* * Javier Abellán. 1 de Abril de 2003 * * Programa de ejemplo de threads. * * Dos hilos acceden simultaneamente a un buffer de 1000 enteros, uno para leer * y otro para escribir. * Si al compilar esta definido MUTEX, los hilos accedaran sincronizadamente * al buffer. Si no está definido, lo harán de cualquier manera. */ #include /* Prototipo de la función que va a ejecutar el thread hijo */ void *funcionThread (void *parametro); /* Buffer de datos al que accederan ambos hilos a la vez */ #define TAMANO_BUFFER 1000 int buffer[TAMANO_BUFFER]; #ifdef MUTEX /* mutex para sincronizar el acceso a buffer */ pthread_mutex_t mutexBuffer; #endif /* * Principal * Lanza un thread para la función funcionThread. * Después de comprobar el posible error, se mete en un bucle infinito * haciendo que todos los elementos de buffer vayan tomando valores iguales, * pero incrementando en uno en cada pasada. */ main() { /* Identificador del thread hijo */ pthread_t idHilo; /* error devuelto por la función de creación del thread */ int error; /* Valor que se meterá en buffer */ int contador = 0; /* Para el bucle para recorrer los items de buffer */ int i; #ifdef MUTEX /* Se inicializa el mutex */ pthread_mutex_init (&mutexBuffer, NULL); #endif /* Creamos el thread */ error = pthread_create (&idHilo, NULL, funcionThread, NULL); /* Comprobamos el error al arrancar el thread */ if (error != 0) { perror ("No puedo crear thread"); exit (-1); } /* Bucle infinito */ while (1) { #ifdef MUTEX /* Se espera y se bloquea el mutex */ pthread_mutex_lock (&mutexBuffer); #endif /* Se cambian todos los valores de buffer */ for (i=0; i