Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

131
Vistas
programa que inicia dos subprocesos y espera a que se completen

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:

  1. Quiero las estrellas ( * ) que se muestran una por una en la línea ahora, quiero que estén una tras otra en la misma línea
  2. No quiero tener que presionar enter después de q 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; }
over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda