mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
28 lines
508 B
Ruby
28 lines
508 B
Ruby
# two threads, two mutex, two condvar ping-pong
|
|
require 'thread'
|
|
m1 = Thread::Mutex.new
|
|
m2 = Thread::Mutex.new
|
|
cv1 = Thread::ConditionVariable.new
|
|
cv2 = Thread::ConditionVariable.new
|
|
max = 100000
|
|
i = 0
|
|
wait = nil
|
|
m2.synchronize do
|
|
wait = Thread.new do
|
|
m1.synchronize do
|
|
m2.synchronize { cv2.signal }
|
|
while (i += 1) < max
|
|
cv1.wait(m1)
|
|
cv2.signal
|
|
end
|
|
end
|
|
end
|
|
cv2.wait(m2)
|
|
end
|
|
m1.synchronize do
|
|
while i < max
|
|
cv1.signal
|
|
cv2.wait(m1)
|
|
end
|
|
end
|
|
wait.join
|