ReaderWriterLock() - a class the allows
one or more threads simultaneous access to
reading the values of protected variables, but only
one thread can be altering the values at any time and
all reads are blocked until the modifications have been assigned
and the lock released by the single writer.
This may not be necessary due to the functional nature of S in which objects are copied.