diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-09-16 20:00:11 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-09-16 20:00:11 +0000 |
commit | 84cc67f98b7f26331de373d4b5b639babd9cac11 (patch) | |
tree | e23711cbcc4e40056e526a86f68b13fdfddc7f2e /test | |
parent | 7e7b52d4a6719ca49bef9b15d48ccbf04dff3477 (diff) |
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@13459 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rwxr-xr-x | test/thread/lbtest.rb | 51 | ||||
-rw-r--r-- | test/thread/test_thread.rb | 14 |
2 files changed, 65 insertions, 0 deletions
diff --git a/test/thread/lbtest.rb b/test/thread/lbtest.rb new file mode 100755 index 0000000000..10bb90185f --- /dev/null +++ b/test/thread/lbtest.rb @@ -0,0 +1,51 @@ +#! /usr/bin/ruby +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}: done" + +# lb.join # leaving waiting threads. + +puts "exit." diff --git a/test/thread/test_thread.rb b/test/thread/test_thread.rb index abdcebffcf..44ae3b338d 100644 --- a/test/thread/test_thread.rb +++ b/test/thread/test_thread.rb @@ -1,3 +1,4 @@ +# -*- ruby-indent-level: 4 -*- require 'thread' require 'test/unit' @@ -63,5 +64,18 @@ class TC_Thread < Test::Unit::TestCase assert_raises(Interrupt) { thread.value } assert(locked) end + + def test_local_barrier + dir = File.dirname(__FILE__) + lbtest = File.join(dir, "lbtest.rb") + $:.unshift File.join(File.dirname(dir), 'ruby') + require 'envutil' + $:.shift + 10.times { + result = `#{EnvUtil.rubybin} #{lbtest}` + assert(!$?.coredump?, '[ruby-dev:30653]') + assert_equal("exit.", result[/.*\Z/], '[ruby-dev:30653]') + } + end end |