Signal, do not guess
A sleep is a guess about timing. A flag states the fact, so the waiting stream starts when the fact is true instead of when the guess says so.
Timeouts must be read
A wait with a timeout can return false. If nobody reads that value, a stalled stage looks like a working one.