This example performs the same data communication as the simple broadcast
example ("Sharing data") but with the point-to-point operations.
<P>
Rings are useful for a variety of operations.  One of the most common is in
forcing operations to be performed sequentially.  One process (typically
process zero) creates a token (simply a small message).  When it is done, it
sends the token to the next process in the ring.  Only the holder of the token
is allowed to operate; all of the other processes wait for the token.  This
can be used, for example, to ensure that only one process at a time is
accessing a file.
<P>
Rings are also useful for performing multiple, overlapping broadcasts,
particularly when the data depends on previous broadcasts (this comes up in
some algorithms for matrix factorization).

