Fun with file descriptors
Posted Jun 12, 2007 15:23 UTC (Tue) by shane
In reply to: Fun with file descriptors
Parent article: Fun with file descriptors
The problem being is that if you use a mutex to protect a blocking
read, you can not interrupt it by closing the file descriptor as the
thread calling close would block on the mutex.
Yes, this is a tricky problem.
You can create a file descriptor that you can "wake" the blocking thread
and then use select() or poll(). You can use a pipe for
this (of course you have to be careful to handle closing the pipe then).
You can also use a condition variable for the reader, and a separate
thread checking for input that signals the reader. A 3rd thread should be
able to close the file descriptor, which should then return EBADF
from it's select() or poll(). (I think...)
Sharing file descriptors between threads is indeed a pain in the ass
though. Correct threaded programming is fairly difficult, it makes one
wonder if maybe good old event-driven programming wasn't really the answer
to post comments)