Return to Implementing Threads
From: Evan Jones <ejones@uwaterloo.ca> Date: Mon Oct 21, 2002 17:45:20 Europe/Zurich To: "Amit Vij" <avij@wam.umd.edu> Subject: Re: thread library On Sunday, Oct 20, 2002, at 23:45 Europe/Zurich, Amit Vij wrote: > I was looking at your thread library method using makecontext, and was > wondering how would you would implement thread Êfunctions that had > parameters.Ê If you can help, please e-mail me back. Hmm... Sure it is possible. In fact, it is quite simple using makecontext. If you consult the man page (available online at http://www.opengroup.org/onlinepubs/007908799/xsh/makecontext.html) you will notice that makecontext has the following prototype: > void makecontext(ucontext_t *ucp, (void *func)(), int argc, ...); and the following description: > The makecontext() function modifies the context specified by ucp, > which has been initialised using getcontext(). When this context is > resumed using swapcontext() or setcontext(), program execution > continues by calling func, passing it the arguments that follow argc > in the makecontext() call. [...] The value of argc must match the > number of integer arguments passed to func, otherwise the behaviour is > undefined. In other words, if you want to call a function with arguments using makecontext, you can modify the example on my page (at http://www.eng.uwaterloo.ca/~ejones/software/threading.html) as follows: // Create the new context THIS TIME WITH ARGUMENTS printf( "Creating child fiber\n" ); // NOTE THE CHANGE: I'm now passing the number of arguments, and then some arguments after makecontext( &child, &threadFunction, 2, "some argument", "one more argument" ); Let me know if you have any further questions, Evan