Issue #3621 has been updated by Joseph Garvey.


Is there any new status on this defect, Even if that status is rejected? I've got a ruby project where independent processes (aka NOT threads) need resource access co-ordination on a Linux box. The obvious choice for this is semaphores.

Right now, I'll probably end up with a roll my own solution.
----------------------------------------
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