Main Page | Modules | File List | Globals

Protothreads


Detailed Description

Protothreads are implemented in a single header file, pt.h, which includes the local continuations header file, lc.h. This file in turn includes the actual implementation of local continuations, which typically also is contained in a single header file.


Files

file  pt.h
 Protothreads implementation.


Modules

group Protothread semaphores
group Local continuations

Defines

#define PT_THREAD(name_args)
 Declaration of a protothread.

#define PT_INIT(pt)
 Initialize a protothread.

#define PT_BEGIN(pt)
 Declare the start of a protothread inside the C function implementing the protothread.

#define PT_WAIT_UNTIL(pt, condition)
 Block and wait until condition is true.

#define PT_WAIT_WHILE(pt, cond)
 Block and wait while condition is true.

#define PT_WAIT_THREAD(pt, thread)
 Block and wait until a child protothread completes.

#define PT_SPAWN(pt, thread)
 Spawn a child protothread and wait until it exits.

#define PT_RESTART(pt)
 Restart the protothread.

#define PT_EXIT(pt)
 Exit the protothread.

#define PT_END(pt)
 Declare the end of a protothread.

#define PT_SCHEDULE(f)
 Schedule a protothread.


Define Documentation

#define PT_BEGIN pt   ) 
 

Declare the start of a protothread inside the C function implementing the protothread.

This macro is used to declare the starting point of a protothread. It should be placed at the start of the function in which the protothread runs. All C statements above the PT_BEGIN() invokation will be executed each time the protothread is scheduled.

Parameters:
pt A pointer to the protothread control structure.
Example:

PT_THREAD(producer(struct pt *p, int event)) { PT_BEGIN(p); while(1) { PT_WAIT_UNTIL(event == CONSUMED || event == DROPPED); produce(); PT_WAIT_UNTIL(event == PRODUCED); } PT_END(p); }

#define PT_END pt   ) 
 

Declare the end of a protothread.

This macro is used for declaring that a protothread ends. It should always be used together with a matching PT_BEGIN() macro.

Parameters:
pt A pointer to the protothread control structure.

#define PT_EXIT pt   ) 
 

Exit the protothread.

This macro causes the protothread to exit. If the protothread was spawned by another protothread, the parent protothread will become unblocked and can continue to run.

Parameters:
pt A pointer to the protothread control structure.

#define PT_INIT pt   ) 
 

Initialize a protothread.

Initializes a protothread. Initialization must be done prior to starting to execute the protothread.

Parameters:
pt A pointer to the protothread control structure.
Example:

void main(void) { struct pt p; int event; PT_INIT(&p); while(PT_SCHEDULE(consumer(&p, event))) { event = get_event(); } }

#define PT_RESTART pt   ) 
 

Restart the protothread.

This macro will block and cause the running protothread to restart its execution at the place of the PT_BEGIN() call.

Parameters:
pt A pointer to the protothread control structure.

#define PT_SCHEDULE  ) 
 

Schedule a protothread.

This function shedules a protothread. The return value of the function is non-zero if the protothread is running or zero if the protothread has exited.

Example

void main(void) { struct pt p; int event; PT_INIT(&p); while(PT_SCHEDULE(consumer(&p, event))) { event = get_event(); } }

Parameters:
f The call to the C function implementing the protothread to be scheduled

#define PT_SPAWN pt,
thread   ) 
 

Spawn a child protothread and wait until it exits.

This macro spawns a child protothread and waits until it exits. The macro can only be used within a protothread.

Parameters:
pt A pointer to the protothread control structure.
thread The child protothread with arguments

#define PT_THREAD name_args   ) 
 

Declaration of a protothread.

This macro is used to declare a protothread. All protothreads must be declared with this macro.

Example:

PT_THREAD(consumer(struct pt *p, int event)) { PT_BEGIN(p); while(1) { PT_WAIT_UNTIL(event == AVAILABLE); consume(); PT_WAIT_UNTIL(event == CONSUMED); acknowledge_consumed(); } PT_END(p); }

Parameters:
name_args The name and arguments of the C function implementing the protothread.

#define PT_WAIT_THREAD pt,
thread   ) 
 

Block and wait until a child protothread completes.

This macro schedules a child protothread. The current protothread will block until the child protothread completes.

Note:
The child protothread must be manually initialized with the PT_INIT() function before this function is used.
Parameters:
pt A pointer to the protothread control structure.
thread The child protothread with arguments
Example:
PT_THREAD(child(struct pt *p, int event)) { PT_BEGIN(p); PT_WAIT_UNTIL(event == EVENT1); PT_END(p); } PT_THREAD(parent(struct pt *p, struct pt *child_pt, int event)) { PT_BEGIN(p); PT_INIT(child_pt); PT_WAIT_THREAD(p, child(child_pt, event)); PT_END(p); }

#define PT_WAIT_UNTIL pt,
condition   ) 
 

Block and wait until condition is true.

This macro blocks the protothread until the specified condition is true.

Parameters:
pt A pointer to the protothread control structure.
condition The condition.
Example:
PT_THREAD(seconds(struct pt *p)) { PT_BEGIN(p); PT_WAIT_UNTIL(p, time >= 2 * SECOND); printf("Two seconds have passed\n"); PT_END(p); }

#define PT_WAIT_WHILE pt,
cond   ) 
 

Block and wait while condition is true.

This function blocks and waits while condition is true. See PT_WAIT_UNTIL().

Parameters:
pt A pointer to the protothread control structure.
cond The condition.


Generated on Thu Feb 24 11:39:17 2005 for The Protothreads Library 1.0 by doxygen 1.3.6