0
最近我必須解決一個ruby相關的多線程問題。紅寶石多線程問題相關互斥陣列
我想知道是否有互斥體的一個哈希數組,我可以新一個互斥體時,我想。
例如我有3個資源和5個線程。我的兩個線程使用第一個資源,另外兩個使用第二個資源,最後一個使用第三個資源。
所以前兩個線程,後兩個線程只能選擇其中之一來運行,而其他等待。但第五個線程可以與他們一起運行。
所以我希望有寫互斥體陣列中的一種方式。
就像:
a = Hash.new
a["1"] = Mutex.new
def init
if a[string] == nil
a[string] = Mutex.new
end
end
線程中運行:
thread1 do |string|
a[string].synchronize do
run_unsafe_code
end
end
我寫的代碼,我想下面:
,但它不工作:
希望看到結果:
如果0或1開始,我不會再看到0或1,直到1或1結束。
#!/usr/bin/ruby
require 'thread'
class Install
@@x = Hash.new
def initialize(url)
@url = url
if @@x[url] == nil
puts url
@@x[url.to_sym] = Mutex.new
end
end
def work()
puts @url+" start."
@@x[@url.to_sym].synchronize do
5.times do
puts @url+" ."
sleep 1
end
end
puts @url+" end."
end
end
thread = []
job = []
3.times do |i|
job << Install.new(i.to_s)
end
2.times do |i|
job << Install.new(i.to_s)
end
job.each do |x|
thread << Thread.new do
x.work
end
end
thread.each do |s|
s.join
end
希望有人能給我一些幫助!非常感謝!