summaryrefslogtreecommitdiff
path: root/test/ruby/lbtest.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/lbtest.rb')
-rw-r--r--test/ruby/lbtest.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/test/ruby/lbtest.rb b/test/ruby/lbtest.rb
new file mode 100644
index 0000000000..c7822c9e9a
--- /dev/null
+++ b/test/ruby/lbtest.rb
@@ -0,0 +1,49 @@
+# frozen_string_literal: false
+
+class LocalBarrier
+ def initialize(n)
+ @wait = Thread::Queue.new
+ @done = Thread::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) / 100.0)
+ print "#{i}: done\n"
+ lb.sync
+ print "#{i}: cont\n"
+ end
+end
+
+lb.sync
+print "#{n-1}: cont\n"
+# lb.join # [ruby-dev:30653]
+
+print "exit.\n"