Return to Implementing Threads

From: Evan Jones <>
Date: Mon Oct 21, 2002  17:45:20 Europe/Zurich
To: "Amit Vij" <>
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 

If you consult the man page (available online at 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 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,