aboutsummaryrefslogtreecommitdiffstats
path: root/test/ruby/lbtest.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-04-09 03:12:03 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-04-09 03:12:03 +0000
commit5098d7ae0dcef98c82e64280d2aded2676738c3b (patch)
tree0f7ee1c679fb749c18705d2c0e6111bcdb807f05 /test/ruby/lbtest.rb
parent0852b7743b523fb25348eacd8d9396772d370b3a (diff)
downloadruby-5098d7ae0dcef98c82e64280d2aded2676738c3b.tar.gz
* 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
Diffstat (limited to 'test/ruby/lbtest.rb')
-rw-r--r--test/ruby/lbtest.rb48
1 files changed, 48 insertions, 0 deletions
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."