Table of Contents

Name

qthread_fork, qthread_fork_to - spawn a qthread

Synopsis

#include <qthread/qthread.h>

int
qthread_fork(const qthread_f *f, const void *arg, aligned_t *ret);

int
qthread_fork_to(const qthread_f *f, const void *arg, aligned_t *ret, const qthread_shepherd_id_t shepherd);

Description

These are the functions for generating new qthreads.

The first argument to these functions, f, is a function that will be run to completion by the created qthread. (Note that f is a qthread_f and not a qthread_t.) The second argument to these functions, arg, is an argument that will be passed to the specified function. Finally, ret is a pointer to the location that the return value of f will be placed into.

The qthread_f function must have a prototype like this:

aligned_t function(qthread_t *me, void *arg);

The qthread_fork_to() function spawns the qthread to a specific shepherd.

When a qthread is spawned, it is immediately scheduled to be run, and may be executed by its shepherd at any time.

The return value of the function f will be placed into the memory pointed to by ret, in accordance with the full-empty bits. When qthread_fork() or qthread_fork_to() is called, ret will be emptied (as if it had been passed to qthread_empty()). When the function f returns, the returned value will be stored into ret and ret will be filled. The way to block until a function has finished is to use qthread_readFF() on the ret pointer.

Environment

The operation of qthread_fork() and qthread_fork_to() is modified by the following environment variables:
QTHREAD_STACK_SIZE
This variable adjusts the size of the stacks that will be created for each thread. Changes to this value during the course of the program run are ignored; the value is only considered when qthread_init() is run.

Return Value

On success, the thread is spawned and 0 is returned. On error, a non-zero error code is returned.

Errors

ENOMEM
Not enough memory could be allocated.

See Also

qthread_prepare(3) , qthread_prepare_for(3) , qthread_schedule(3) , qthread_schedule_on(3)


Table of Contents