The semantics of request() differ depending on whether shared() returns true. If the Lock is shared(), then request() should not fail if another lock is held against the resource identified by name (though it might fail for other reasons). If it is not shared() -- i.e. it's an exclusive (write) lock -- then other locks should cause request() to fail.