QSem makes nonsense claim
It says waiting threads are serviced in FIFO order. This isn't really a meaningful statement. What does "first in" mean? Furthermore, the first step in waitQSem
is takeMVar
, which provides no ordering guarantees whatsoever. As far as I can tell, there's no meaningful difference between a thread waiting a long time in the queue and one waiting a long time to get into the queue. So I think we probably want to weaken the promise here to match the MVar
fairness guarantee: if a thread waits on a QSem
, and that QSem
continues to be signaled, then the thread will eventually proceed.