You should probably name this lock `read_write_lock`, otherwise it's confusing to get the write lock just for reading.