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