Semaphores are things intended to pass signals between
independent threads or processes. A process can
wait on a semaphore: this means it is suspended
until some other process signals the semaphore.
If the semaphore has already been signaled, however,
when the process waits, it doesn't actually suspend,
but just continues right on through.
Semaphores for mutual exclusion are a sub-category
of all semaphores. They are used to block access to
a resource, usually. If you have a socket that only
one process can use at a time, and you have multiple
processes that use the socket, then each process
can have code like this (pseudocode):
Start all the processes and signal the semaphore once.
One of the waiting processes will get to go; then it
will signal the semaphore, and another process waiting
will go; etc.
In VisualWorks Smalltalk, you can create a semaphore that
already has the initial signal mentioned above, by
the code Semaphore forMutualExclusion. --DanaAnthony