I created a mutex using a one-bit memory block, and a non-reentrant VI.
The VI loops as long as that bit is set, then sets it and exits. Calling this VI is equivalent to setting a mutex (or being blocked on it). Clearing the bit is equivalent to unblocking the mutex.
So the first call to the VI sets the bit and exits.
The second call waits in the VI because the bit is set.
The third call waits to enter the VI because the VI is not reentrant.
The first caller clears the bit.
The second call exits the VI because the bit is clear, but the VI sets the bit.
The third caller enters the VI...
ad infinitum.
Now if only it would compile without telling me "Illegal combination: Port A Width and Port A Depth".