//----------------------------------------------------------- // fiber.cc //----------------------------------------------------------- #include #include #include #include #include #include //----------------------------------------------------------- using namespace std::chrono_literals; //----------------------------------------------------------- pthread_t cliente, servidor; //----------------------------------------------------------- void manejador_sigusr1(int) { signal(SIGUSR1, manejador_sigusr1); std::cout << "[servidor]: petición recibida\n"; std::cout << "[servidor]: respuesta enviada\n"; pthread_kill(cliente, SIGUSR2); } //----------------------------------------------------------- void manejador_sigusr2(int) { signal(SIGUSR2, manejador_sigusr2); std::cout << "[cliente ]: respuesta recibida\n"; std::cout << "[cliente ]: petición enviada\n"; pthread_kill(servidor, SIGUSR1); } //----------------------------------------------------------- int main() { alarm(1); boost::fibers::fiber s([&] { servidor = pthread_self(); signal(SIGUSR1, manejador_sigusr1); boost::fibers::fiber c([&] { cliente = pthread_self(); signal(SIGUSR2, manejador_sigusr2); std::cout << "[cliente ]: petición enviada\n"; pthread_kill(servidor, SIGUSR1); boost::this_fiber::sleep_for(1s); }); c.join(); }); s.join(); } //-----------------------------------------------------------