//----------------------------------------------------------- // fiber.cc //----------------------------------------------------------- #include // boost::fibers::fiber #include // std::chrono_literals #include // signal #include // puts #include // pthread_self, pthread_kill #include // 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() { servidor = pthread_self(); signal(SIGUSR1, manejador_sigusr1); boost::fibers::fiber([&] { cliente = pthread_self(); signal(SIGUSR2, manejador_sigusr2); puts("[cliente ]: petición enviada\n" "[cliente ]: respuesta recibida"); pthread_kill(servidor, SIGUSR1); pause(); }).join(); } //-----------------------------------------------------------