En entornos unix, la familia de funciones makecontext()/swapcontext()
a veces se usa para implementar corutinas en C. Sin embargo, estas funciones manipulan directamente la pila y el flujo de ejecución. A menudo, cuando estas funcionalidades de bajo nivel son bastante diferentes cuando se cambia de C a C++.Son las funciones makecontext()/swapcontext() compatibles con C++
Así que la pregunta es, si habría algún problema con la implementación de corutinas usando makecontext()
y swapcontext()
. Por supuesto, uno obviamente debería tener muy buen cuidado, que una excepción nunca podría escapar de una corutina de este tipo, ya que no habría ningún controlador de excepción en la pila para esto y el programa probablemente segmentaría. Pero aparte de eso ¿hay alguna incompatibilidad entre la forma en que C++ maneja las cosas internamente y makecontext()
y setcontext()
modificar la ruta de ejecución?
Nunca había oído hablar de estas funciones. ¿Sabía que [POSIX 2001] (http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html) ya los marcó obsoletos en favor de los hilos? –
@larsmans: Una pena. Las cosas que son fáciles con corutinas son mucho más difíciles con los hilos. Sí, * puedes * emular corutinas con hilos, pero solo con sobrecarga (¡sincronización!), Y cuando solo se está ejecutando un hilo en cualquier momento con todos los demás bloqueados, en realidad no es para lo que está pensado el enhebrado. – celtschk