Mi programa contiene dos subprocesos para los que se espera que finalicen. Uso una sola variable que se comparte entre subprocesos y esta es x y un solo mutex. La tecla q termina el hilo
Problemas que quiero resolver:
* ) que se muestran una por una en la línea ahora, quiero que estén una tras otra en la misma líneaq para salir del programa. Quiero que salga del programa inmediatamente cuando presione q (sin teclas adicionales)¿Qué debo cambiar?
PD (Tengo dos advertencias al ejecutar el programa con gcc program.c -o program -lpthread , pero eso no es lo que me interesa en este momento, lo resolveré más adelante)
program.c: In function 'first': program.c:24:1: warning: control reaches end of non-void function [-Wreturn-type] 24 | } | ^ program.c: In function 'second': program.c:44:1: warning: control reaches end of non-void function [-Wreturn-type] 44 | } | ^código:
#include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <sys/time.h> pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond_q = PTHREAD_COND_INITIALIZER; char *x; void *first(void *arg) { x = (char*)malloc(sizeof(char)); do { scanf("%c", x); pthread_mutex_lock(&mut); if(x[0] == 'q') { pthread_cond_signal(&cond_q); } pthread_mutex_unlock(&mut); } while( x[0] != 'q'); free(x); printf("exited thread 1\n"); } void *second(void *arg) { struct timespec ts; int ok = 1; pthread_mutex_lock(&mut); while(ok) { clock_gettime(CLOCK_REALTIME, &ts); ts.tv_sec += 1; ok = pthread_cond_timedwait(&cond_q, &mut, &ts); if(ok == 0) break; printf("*\n"); } pthread_mutex_unlock(&mut); printf("exited thread 2\n"); } int main() { pthread_t read; pthread_t write; pthread_create(&read, NULL, &first,NULL); pthread_create(&write, NULL, &second,NULL); pthread_join(read, NULL); pthread_join(write, NULL); pthread_cond_destroy(&cond_q); pthread_mutex_destroy(&mut); return 0; }