From 5098d7ae0dcef98c82e64280d2aded2676738c3b Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 9 Apr 2008 03:12:03 +0000 Subject: * test/ruby/test_thread.rb: new tests from Sylvain Joyeux in [ruby-Patches-19361]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/lbtest.rb | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 test/ruby/lbtest.rb (limited to 'test/ruby/lbtest.rb') diff --git a/test/ruby/lbtest.rb b/test/ruby/lbtest.rb new file mode 100644 index 0000000000..df7872dc76 --- /dev/null +++ b/test/ruby/lbtest.rb @@ -0,0 +1,48 @@ +require 'thread' + +class LocalBarrier + def initialize(n) + @wait = Queue.new + @done = Queue.new + @keeper = begin_keeper(n) + end + + def sync + @done.push(true) + @wait.pop + end + + def join + @keeper.join + end + + private + def begin_keeper(n) + Thread.start do + n.times do + @done.pop + end + n.times do + @wait.push(true) + end + end + end +end + +n = 10 + +lb = LocalBarrier.new(n) + +(n - 1).times do |i| + Thread.start do + sleep((rand(n) + 1) / 10.0) + puts "#{i}: done" + lb.sync + puts "#{i}: cont" + end +end + +lb.sync +puts "#{n-1}: cone" + +puts "exit." -- cgit v1.2.3