low overhead read-write locking