Multiple-reader, single-writer lock. Is in one of three states:
"Free": Read or write access can be acquired without blocking.
"Read": One or more threads have acquired read access. Blocks write access.
"Write": A single thread has acquired write access. Blocks other threads from acquiring both read and write access.