Re: Waiting on multiple blocking events
Yang Zhang <[email protected]> Mon, 01 Dec 2008 14:57:51 -0500
| Newsgroups | gmane.comp.lib.state-threads.user |
|---|---|
| Message-ID | <[email protected]> |
Yang Zhang wrote:
> Mike Abbott wrote:
>>> Is there a way to "compose" together multiple blocking operations?
>>
>> Sounds interesting, kinda like what kqueue()/kevent() do: one-stop
>> event processing. "Block this thread until one of this laundry list of
>> disparate events fires." Do you have a prototype implementation you'd
>> like to contribute to the project, or wrappers you'd contribute to its
>> "extensions" library?
>
> I have a poor man's implementation of "cleanly interruptible points."
> This involves primitives called "hubs" (sets of threads) that threads
> may join and other threads may signal. It's similar to a condition
> variable, but signaling results in interrupting the thread from its
> current blocking operation.
>
> {
> st_intr intr(hub);
> int ret = st_read_fully(...);
> if (ret == EINT) ...
> ...
> }
>
> This turned out to be suitable enough for my purposes. The code is all
> available in my little header of ST tools:
>
> http://assorted.svn.sf.net/viewvc/assorted/cpp-commons/trunk/src/commons/st/st.h?revision=1077&view=markup
>
>
> I thought about my more general suggestion some more. You can implement
> any() atop ST by starting a thread for each blocking operation involved
> in the any(), wrapping them in functions that - on finishing - interrupt
> the other threads (using something similar to the above mechanism, on a
> hub created locally by the any() call), informing them that they're the
> losers (so that they may properly react/clean up), and also notifying
> the parent thread of its own success and return value.
Forgot to add: such an implementation would be much more expensive than
it needs to be, since it's actually creating a separate thread per
blocking operation, when in fact you shouldn't really need to do this if
you're willing to modify ST to explicitly support such operation.
>
>>
>>
>>
>> -------------------------------------------------------------------------
>> This SF.Net email is sponsored by the Moblin Your Move Developer's
>> challenge
>> Build the coolest Linux based applications with Moblin SDK & win great
>> prizes
>> Grand prize is a trip for two to an Open Source event anywhere in the
>> world
>> http://moblin-contest.org/redirect.php?banner_id=100&url=/
>> _______________________________________________
>> State-threads-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/state-threads-users
>
>
--
Yang Zhang
http://www.mit.edu/~y_z/
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/