On Mon, 2006-06-05 at 01:21 +0200, Stefan Westerfeld wrote:
Hi!
I am trying to notify a high priority (nice -20 or nice -19) thread from
a realtime thread (from a jack callback to be precise). Of course I want
the realtime thread to not block, but I want the high priority thread to
react as soon as possible. For the first implementation, I used a
condition, and pthread_cond_signal. But as I can't aquire a mutex within
the realtime thread, at least not always (at most with trylock()), this
results in racy code.
Also, it doesn't integrate well with poll(), which the high priority
process should be able to use. So basically I want to switch to a pipe
write() instead of pthread_cond_signal.
I seem to be alone on this, but I still say semaphores are the best for
this - sem_post is async signal safe. It might not be pedantically
"realtime safe" (depending what the Linux guys have done with futexes I
guess) but it's certainly far better than a mutex/cond pair (and I would
guess better than writing to a pipe as well). A mutex obviously isn't
async signal safe, and I doubt writing to a pipe is either.
It's also handy that a semaphore is a counter, so you can easily
gracefully handle the case where the realtime thread is going a lot
faster than the consumer, or the consumer gets hung up for a little bit,
etc.
Semaphores seem about perfect for this to me.. am I missing something?
Why doesn't anyone ever recommend them?
-DR-