From: Ricardo Panaggio Date: 2011-05-19T10:32:14+09:00 Subject: [ruby-core:36325] [Ruby - Feature #3621] Add Semaphore to Ruby Issue #3621 has been updated by Ricardo Panaggio. This can't go upstream right now because it's a huge chunk of code, only tested by myself, and forgotten for lack of use. I was willing to create a gem for that code that I've generated, but couldn't find any use of it. There was no extra motivation, as I anyone was going to use it. That's why it never became a gem. I don't know if I could close this myself, so I ask for some advise in here. Also, if you think you're going to use this somehow, we could tal. This could become a gem with very little effort of mine, so just ping me on #ruby or by e-mail. ---------------------------------------- Feature #3621: Add Semaphore to Ruby http://redmine.ruby-lang.org/issues/3621 Author: Ricardo Panaggio Status: Open Priority: Normal Assignee: Category: ext Target version: =begin Semaphores are very useful synchronization primitives. There's no Semaphore code today that works with trunk AFAIK. Attached patches contains Semaphore and CountingSemaphore implemented in both Ruby and C. I've adapted Fukumoto's [1] code to Ruby 1.9.3 and ported it do C. final-semaphore.patch contains the diff between ruby patched with Feature #3620 and my current code, as it share's code with code from that feature request. final-semaphore+reqs.patch contains the diff from ruby trunk and my current code (with content from Feature #3620). The C code is ~2 times faster (see [2] for the benchmark's code): Rehearsal -------------------------------------------------------------- Semaphore(overall) 17.750000 0.030000 17.780000 ( 17.739792) Semaphore#wait 1.520000 0.000000 1.520000 ( 1.516659) Semaphore#signal 2.670000 0.000000 2.670000 ( 2.672494) Thread::Semaphore(overall) 7.420000 0.000000 7.420000 ( 7.403657) Thread::Semaphore#wait 0.830000 0.000000 0.830000 ( 0.831476) Thread::Semaphore#signal 0.840000 0.000000 0.840000 ( 0.833592) ---------------------------------------------------- total: 31.060000sec I've already sent it to ruby-core for discussion (see ruby-core:31429). This patch is one of the deliverables of my RubySoC project (slot #17): "Improving Ruby's Synchronization Primitives and Core Libraries" [3,4] [1] http://www.imasy.or.jp/~fukumoto/ruby/semaphore.rb [2] http://github.com/panaggio/rubysoc-2010/blob/master/benchmarks/semaphore.rb [3] http://pastebin.com/viSnfqe6 [4] http://rubysoc.org/projects =end -- http://redmine.ruby-lang.org