condition variables and mutexes Jim Blandy 25 Feb 2000 22:10 UTC

The `mutex-unlock!' procedure described in the SRFI accepts, as an
optional second argument, a condition variable; if specified, the
thread will atomically release the mutex and add itself to the
condition variable.  However, when the thread is awakened, it does not
automatically re-acquire the mutex.

In both the Java and POSIX thread interfaces, the operation for
waiting on a condition variable (`wait' in Java and
`pthread_cond_wait' in the POSIX thread API) automatically re-acquires
the mutex for the thread when it is awakened.

I can't see any reason this re-acquisition must necessarily be part of
the waiting operation --- clearly, the awakened thread must wait its
turn for the mutex, like everyone else.  But I think it is easier to
reason about: the invariant "I've got the mutex" holds upon entry and
exit to the waiting operation --- just not while it's waiting.

If this is a deliberate choice, it's an unusual one, and there should
be some rationale given in the SRFI.

If you decide to change the SRFI's waiting operation to more closely
resemble those provided by the other systems, then I think it should
be given its own name, instead of being attached to `mutex-unlock!'
--- it would be odd indeed for a function named `mutex-unlock!' to
return with the mutex still locked.  `condition-variable-wait!' would
be one possibility.