Blocking on multiple threads with timeout
Andrew Hacking
ahacking at optusnet.com.au
Sun Feb 27 17:17:05 PST 2005
On Mon, 2005-02-28 at 10:58, Jonathon McKitrick wrote:
> : Instead, you may want to re-consider the software that *allows* your
> : worker threads to block indefinitely, because it probably won't be
>
> Well, on the first round, we check for the device we are talking to (serial,
> GPIB, IP, USB, etc.). That is where a timeout is most likely to occur. But
> this operation is performed serially, so no threads are spawned. But after
> that, we spawn threads to initialize each device (which is full of motors
> and such) and this can take a minute or more. Basically, I should be able
> to write the init thread to timeout if the 'ok' reply has not been received
> after the 'init' command has been sent to the device. Is that what you are
> saying?
>
Yes, pass a timeout to your init function (or via some other means if
required), and ensure that the code does not block indefinitely. Your
main thread can just perform a pthread_join() on all the worker threads,
and *know* that it wont block much longer than the timeout.
> : operations that can block indefinitely. This is much easier and more
> : reliable than the above high wire act, and often avoids the need for a
> : "manager" thread altogether.
>
> I'd like to start the init threads, put the id's in an array, block until
> they are all done, then continue. Each thread should have its own timeout
> handling internally.
>
Sounds fine.
-Andrew.
More information about the Users
mailing list