//------------------------------------------------- // pthread.c //------------------------------------------------- #include // pthread_create pthread_join #include // signal SIGALRM #include // puts #include // alarm sleep //------------------------------------------------- pthread_t id_cliente, id_servidor; //------------------------------------------------- void manejador_sigusr2(int) { puts("[cliente ]: respuesta recibida\n" "[cliente ]: petición enviada"); pthread_kill(id_servidor, SIGUSR1); } void *hebra_cliente(void *) { signal(SIGUSR2, manejador_sigusr2); puts("[cliente ]: petición enviada"); pthread_kill(id_servidor, SIGUSR1); for (;;) pause(); return NULL; } //------------------------------------------------- void manejador_sigusr1(int) { puts("[servidor]: petición recibida\n" "[servidor]: respuesta enviada"); pthread_kill(id_cliente, SIGUSR2); } void *hebra_servidor(void *) { id_servidor = pthread_self(); signal(SIGUSR1, manejador_sigusr1); pthread_create(&id_cliente, NULL, hebra_cliente, NULL); pthread_join(id_cliente, NULL); return NULL; } //------------------------------------------------- int main() { alarm(1); hebra_servidor(NULL); } //-------------------------------------------------