Thread scheduling governs the competition among threads for
various system resources.
Multiplexed threads vie for a limited number of LWPs.
Bound threads are spared this competition; each maintains its
association with its LWP for its lifetime.
LWPs are, in turn, assigned by the kernel to a limited number
of (hardware) processors for execution.
To coordinate their activities,
threads often make use of various synchronization mechanisms.
At times there may be more than one thread waiting for
a given event (for example, the unlocking of a semaphore).
The Threads Library must decide which thread will receive
the resource.