创建Ruby线程时,在Thread.new
之后给出一个块,在新的之后,线程立即开始执行。 Ruby使用Monitor
类作为互斥锁。但我不明白如何将监视器对象传递给线程执行体。请参阅以下示例代码:
thread1 = Thread.new do
sum=0
1.upto(10) {|x| sum = sum + x}
puts("The sum of the first 10 integers is #{sum}")
end
thread2 = Thread.new do
product=1
1.upto(10) {|x| product = product * x}
puts("The product of the first 10 integers is #{product}")
end
thread1.join
thread2.join
我想要新建一个Monitor
对象,并将其传递给thread1
和thread2
以同步puts
语句。怎么做?请给我示例代码。
这个问题可以更普遍地提出来。如何将对象传递给线程执行块?
答案 0 :(得分:0)
线程与其他任何类都没有什么不同。您可以使用任何有效变量。
require 'monitor'
lock = Monitor.new
product=1
sum=0
thread1 = Thread.new do
1.upto(10) {|x|
sum = sum + x
lock.synchronize do
puts product
end
}
puts("The sum of the first 10 integers is #{sum}")
end
thread2 = Thread.new do
1.upto(10) {|x|
product = product * x
lock.synchronize do
puts sum
end
}
puts("The product of the first 10 integers is #{product}")
end
thread1.join
thread2.join