From: Adam Bender Date: 2008-03-25T12:32:38+09:00 Subject: thread.rb I want to modify the Queue class in thread.rb, so I first searched for the file. I found it in /usr/lib/ruby/1.8/thread.rb, both on a Mac and a Linux machine. On the Mac, the file was as expected, but on the Linux machine, it contained only this: ----------------------- unless defined? Thread fail "Thread not available for this ruby interpreter" end require 'thread.so' ----------------------- Does this mean the Ruby code for Queue is compiled into a shared library? Is it possible to edit the code? (I know I can modify the class from outside the file, and that is probably what I will end up doing, but I'm rather surprised by the above file contents and would like to know more about it). Thanks, Adam P.S. On a related note, I want to add a method to the Queue class that is similar to pop, but will take a timeout value and return nil if it no item is push'ed before timeout seconds have elapsed. Can anyone suggest something better than the following: class Queue def pop_with_timeout(timeout) elapsed = 0.0 while (Thread.critical = true; @que.empty?) @waiting.push Thread.current Thread.critical = false elapsed += sleep(timeout - elapsed) puts elapsed return nil if elapsed >= timeout end @que.shift ensure Thread.critical = false end end That was the first thing I came up with, and I'm (again) surprised that it works - why does sleep ever return less than 1? What interrupts it?