From: Yang Z. <yan...@gm...> - 2008-12-01 18:34:20
|
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. > > > > ------------------------------------------------------------------------- > 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 > Sta...@li... > https://lists.sourceforge.net/lists/listinfo/state-threads-users -- Yang Zhang http://www.mit.edu/~y_z/ |