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