On Mar 19, 2006, at 5:24 PM, Bill Kelly wrote: > Hi, > > From: "Joshua Haberman" <joshua / reverberate.org> >> >> I emailed ruby-core about this a while back, but got no response, >> so here is a patch to make my question more concrete. >> This patch adds a hook into the thread scheduler that extensions >> can use to wake up a thread asynchronously. It is a function you >> can safely call from any thread. It will mark the thread >> runnable, so that the thread scheduler will consider running it >> the next time around. > > I would love to be able to wake up a Ruby thread from some other > operating system thread. In my situation, I didn't think just > marking the thread as runnable would do the job, since Ruby's > OS-thread is likely waiting in select() and wouldn't notice the > change until it returned from the system call. > > Is this not an issue for you? Good point. I guess my solution would require that other Ruby threads are running (therefore running the scheduler periodically). I don't believe the Ruby interpreter busy-waits when all threads are asleep or waiting on I/O. I wonder if it would work to send a signal to the process, as a way of interrupting the select(). Send a signal, select() returns - EINTR, and the scheduler continues, noticing that a thread is eligible for running. Could this work? Josh