// // creado por GXF el 24/03/2020. // #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> pthread_mutex_t bloqueo = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; typedef struct ListNode_S { de datos INT; ListNode_S struct * siguiente; }nodo; nodo * cabeza = NULL; vacío del consumidor () { while (1) { pthread_mutex_lock (y bloqueo); mientras que (NULL == cabeza) { printf ( "en la cabeza del consumidor es nulo \ n"); pthread_cond_wait (y cond, y la cerradura); } Nodo * tmp = cabeza; dirigirse = cabeza-> siguiente; printf ( "datos de consumo:% d \ n", TMP-> datos); libre (TMP); pthread_mutex_unlock (y la cerradura); } } Int main () { pthread_t consumserThread; pthread_create (y consumserThread, NULL, consumidor, NULL); for (int i = 0; i <10; i ++) { pthread_mutex_lock (y la cerradura); nodo * tmp = malloc (sizeof (nodo)); TMP-> data = i; TMP-> siguiente = cabeza; printf ( "datos a producir:% d \ n", TMP-> datos); cabeza = tmp; pthread_cond_signal (y cond); pthread_mutex_unlock (y la cerradura); sueño (1); } pthread_join (consumserThread, NULL); return 0; }