Abstract the choice of read or write locks to the parent so we can refactor to non-RW locks if necessary