我正在研究Ruby中的多线程程序,只是想确定一个简单的问题。
例如,我有一个名为School
的班级,另外两个班级是Boy
和Girl
。
在School
我有一个哈希记录所有男孩和女孩的出勤率。并且我使每个男孩/女孩成为School
中的一个主题(这样他们可以单独进行活动)
我希望所有男孩和女孩线程都可以看到并更改出勤哈希值。 (就像一个女孩来到学校,在哈希中检查她的名字,当她离开时,在哈希中删除她的名字)
我知道我可以使用monitor进行线程锁定,但我不熟悉脚本语言,所以我不确定所有线程如何看到哈希变量并修改它们。 (有点像C / JAVA中的静态)
谢谢
答案 0 :(得分:3)
这样的事情:
threads = []
hash = {g:0,n:0}
m = Mutex.new
threads << Thread.new(optional_pass_by_value) do |value|
#do whatever
#modify hash
m.synchronize {hash[:g] += 1} #By using synchronize you get an atomic behavior
#Only one thread will be able to access and modify this hash at one time.
end
threads.each {|t| t.join}