In ambienti unix la famiglia di funzioni makecontext()/swapcontext()
viene talvolta utilizzata per implementare le coroutine in C. Tuttavia queste funzioni manipolano direttamente lo stack e il flusso di esecuzione. Spesso quando queste funzionalità di basso livello sono abbastanza diverse quando si passa da C a C++.Le funzioni makecontext()/swapcontext() sono compatibili con C++
Quindi la domanda è, se ci sarebbe qualche problema con l'implementazione di coroutine usando makecontext()
e swapcontext()
. Ovviamente si dovrebbe ovviamente fare molta attenzione, che un'eccezione non potrebbe mai sfuggire a tale coroutine, dal momento che non ci sarebbe alcun gestore di eccezioni in pila per questo e il programma sarebbe molto probabilmente segfault. Ma a parte questo c'è qualche incompatibilità tra il modo in cui C++ gestisce le cose internamente e makecontext()
e setcontext()
modificare il percorso di esecuzione?
Non avevo mai sentito parlare di queste funzioni. Sei consapevole che [POSIX 2001] (http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html) li ha già contrassegnati come obsolescenti a favore dei thread? –
@larsmans: un peccato. Le cose che sono facili con le coroutine sono molto più difficili con i thread. Sì, è possibile * emulare le coroutine con i thread, ma solo con overhead (sincronizzazione!), E quando un solo thread è in esecuzione in qualsiasi momento con tutti gli altri bloccati, non è proprio ciò che si intende per threading. – celtschk