The x-kernel uses a ``thread-per-message'' model of computation, and
provides primitives for synchronizing threads. The following
operations affect
thread scheduling. Of these, only semWait
can cause the x-kernel to run a different thread than the current one.
Note that this section does not define any operations for creating or
destroying threads. This is because x-kernel threads are created and
destroyed implicitly: threads are created by the device driver (in the
case of incoming messages), by the system call interface (in the case
of outgoing messages), and by the event library (in the case of an
event firing). Threads are destroyed when they return from the
outer-most procedure.