> cv_signal() unblocks only a single thread. That is what I expected, but saw it released all waiters. However, it might be that all waiters had the timeout set to 0, turning this essentially into cv_wait_sig().
I will test this again carefully with some more debug output. > I assume what you’re referring to is the warning about spurious wakes, which > is in the description if cv_wait(), and is a completely separate issue. I think I need to optimize this to handle these wakeups for whatever reason they may occur. It might also happen that a releasing thread increases the count of a semaphore somewhat below what the acquiring thread needs. This would be a regular wakeup without acquisition and requires adjusting the remaining timeout as well. Stephan