in reply to Re^6: Weird syntax. What does this goto statement do? ( 'goto &NAME' use cases)
in thread Weird syntax. What does this goto statement do?
And I can't deal with your C code either, especially as it's far from short.
I never claimed that creating a multi-tasking system would be trivial? 60 lines is pretty short, and I presented it in even smaller sections.
Besides, the point is the following producer-consumer example runs and I only used the principles I said I used:
void *main_thread( void* dummy ) { (void)dummy; // Create the threads. ThreadId thread1_id = create_thread( func1, NULL ); ThreadId thread2_id = create_thread( func2, NULL ); // Wait for them to finish. wait_for_thread( thread1_id ); wait_for_thread( thread2_id ); return NULL; } void *func1( void *dummy ) { (void)dummy; for ( int i=5; i--; ) { printf( "func1\n" ); if ( i ) thread_sleep( 1 ); } return NULL; } void *func2( void *dummy ) { (void)dummy; for ( int i=5; i--; ) { printf( "func2\n" ); if ( i ) thread_sleep( 1 ); } return NULL; }
I disagree, most probably your assumptions are based on some C lang specific conventions including call stack manipulations.
The first line from your link: "Coroutines are computer program components that allow execution to be suspended and resumed".
Suspending and resuming a function requires saving where it's at (execution pointer) and it's state (call stack incl lexicals).
Nothing about C or any other language here. You'll find the same thing in Perl coros (Coro) and everywhere else coros exist.
The first yield-to example with routines translates 1to1
Neither examples can be achieved using goto &sub. goto &sub can't be used to jump into the middle of a sub from outside a sub, much less restore the existing lexical state that existed when that point in the sub was previously reached. And I have no idea what you think would save that state in the first place.
|
|---|