Name
cothreads -- userspace threads
Description
Cothreads are a simple user-space method for switching between
subtasks. They're based on setjmp()/longjmp() in their current form.
Cothreads are used for loop-based elements that pull data instead
of being fed with data. They can also be used to pull a specific region
of data out of their src element.
Details
COTHREAD_STACKSIZE
#define COTHREAD_STACKSIZE 8192 |
The default stack size of a cothread.
COTHREAD_MAXTHREADS
#define COTHREAD_MAXTHREADS 16 |
The maximum number of cothreads we are going to support.
STACK_SIZE
#define STACK_SIZE 0x200000 |
CURRENT_STACK_FRAME
#define CURRENT_STACK_FRAME ({ char __csf; &__csf; }) |
struct cothread_state
struct cothread_state {
cothread_context *ctx;
int threadnum;
cothread_func func;
int argc;
char **argv;
int flags;
void *sp;
/* is this needed any more? */
void *top_sp;
void *pc;
jmp_buf jmp;
}; |
struct cothread_context
struct cothread_context {
cothread_state *threads[COTHREAD_MAXTHREADS];
int nthreads;
int current;
GHashTable *data;
}; |
cothread_func ()
int (*cothread_func) (int argc,
char **argv); |
the function that will be called when the cothread starts. The function
prototype is like a main() function, so you can do whatever you want with
it.
COTHREAD_STARTED
#define COTHREAD_STARTED 0x01 |
Indicates the cothread is started.
cothread_init ()
Create and initialize a new cothread context
cothread_create ()
Create a new cothread state in the given context
cothread_setfunc ()
Set the cothread function
cothread_switch ()
Switches to the given cothread state
cothread_getcurrent ()
int cothread_getcurrent (void); |
cothread_set_data ()
void cothread_set_data (cothread_state *thread,
gchar *key,
gpointer data); |
adds data to a cothread
cothread_get_data ()
get data from the cothread