2

我正在用 Ruby 开发一个多线程程序,只是想确定一个简单的问题。

例如,我有一个名为 的类School,另外两个类是BoyGirl

School我有一个哈希,可以跟踪所有男孩和女孩的出勤率。我让每个男孩/女孩成为一个线程School(这样他们就可以单独进行活动)

我希望所有男孩和女孩线程都可以看到并更改出勤哈希。(比如如果一个女孩来学校,在哈希中检查她的名字,当她离开时,在哈希中删除她的名字)

我知道我可以使用监视器来执行线程锁定,但我不熟悉脚本语言,所以我不确定所有线程如何看到哈希变量并修改它们。(有点像 C/JAVA 中的静态)

谢谢

4

1 回答 1

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}
于 2012-05-05T18:51:50.043 回答