//----------------------------------------------------------- // thread.cc //----------------------------------------------------------- #include // std::chrono_literals #include // signal #include // puts #include // pthread_self, pthread_kill #include // std::jthread #include // alarm, pause //----------------------------------------------------------- using namespace std::chrono_literals; //----------------------------------------------------------- pthread_t cliente, servidor; //----------------------------------------------------------- void manejador_sigusr1(int) { puts("[servidor]: petición recibida\n" "[servidor]: respuesta enviada"); pthread_kill(cliente, SIGUSR2); } //----------------------------------------------------------- void manejador_sigusr2(int) { puts("[cliente ]: respuesta recibida\n" "[cliente ]: petición enviada"); pthread_kill(servidor, SIGUSR1); } //----------------------------------------------------------- int main() { alarm(1); servidor = pthread_self(); signal(SIGUSR1, manejador_sigusr1); std::jthread([&] { cliente = pthread_self(); signal(SIGUSR2, manejador_sigusr2); puts("[cliente ]: petición enviada"); pthread_kill(servidor, SIGUSR1); while (true) pause(); }); } //-----------------------------------------------------------