59 lines
1.8 KiB
Plaintext
59 lines
1.8 KiB
Plaintext
/**
|
|
\defgroup pt Protothreads
|
|
@{
|
|
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.
|
|
|
|
*/
|
|
|
|
/** @} */
|
|
|
|
/**
|
|
\defgroup examples Examples
|
|
@{
|
|
|
|
\section example-small A small example
|
|
|
|
This first example shows a very simple program: two protothreads
|
|
waiting for each other to toggle two flags. The code illustrates how
|
|
to write protothreads code, how to initialize protothreads, and how to
|
|
schedule them.
|
|
|
|
\include example-small.c
|
|
|
|
|
|
\section example-code-lock A code-lock
|
|
This example shows how to implement a simple code lock - the kind of
|
|
device that is placed next to doors and that you have to push a four
|
|
digit number into in order to unlock the door.
|
|
|
|
The code lock waits for key presses from a numeric keyboard and if the
|
|
correct code is entered, the lock is unlocked. There is a maximum time
|
|
of one second between each key press, and after the correct code has
|
|
been entered, no more keys must be pressed for 0.5 seconds before the
|
|
lock is opened.
|
|
|
|
\include example-codelock.c
|
|
|
|
\section example-buffer The bounded buffer with protothread semaphores
|
|
|
|
The following example shows how to implement the bounded buffer
|
|
problem using the protothreads semaphore library. The example uses
|
|
three protothreads: one producer() protothread that produces items,
|
|
one consumer() protothread that consumes items, and one
|
|
driver_thread() that schedules the producer and consumer protothreads.
|
|
|
|
Note that there is no need for a mutex to guard the add_to_buffer()
|
|
and get_from_buffer() functions because of the implicit locking
|
|
semantics of protothreads - a protothread will never be preempted and
|
|
will never block except in an explicit PT_WAIT statement.
|
|
|
|
\include example-buffer.c
|
|
|
|
*/
|
|
|
|
|
|
/** @} */
|