I have Ruby embedded into a multithreaded C++ app. It’s easy for
a C++ thread to wait for an event from a Ruby thread.(*) But I’m
looking for ways to allow a Ruby thread to sleep until an event
from a C++ thread is posted.
My application is cross-platform so my solution needs to work on
Windows and OS X.
So far all I can think of, without hacking ruby itself, is to
open a TCP or UDP socket, and have the Ruby thread select() on
the socket. Then the C++ side can fire a packet at the socket to
wake the ruby thread up.
Can anyone think of a simpler way? I haven’t measured the overhead
yet, but offhand it seems overkill to send a packet through the IP
stack to do the work of a condition variable. (But yes I do need
to actually measure it.)
(*) Sleeping in C++ for an event from a Ruby thread: The C++ thread
sleeps on a boost::condition variable. The Ruby thread invokes a C
extension method which notify()'s the condition variable. Simple
enough in this direction.
Any thoughts appreciated,