Tag: mutex

Ruby信号量?

我正在研究Ruby中“Fair Barbershop”问题的实现。 这是一个课堂作业,但我不是在寻找任何讲义。 我一直在寻找疯狂,但我似乎无法找到一个反映在C中发现的信号量的Ruby实现。 我知道有Mutex,这很棒。 单一实现,确实完成了那种信号量应该做的事情。 然后是条件变量。 我认为这样做会很好,但是看看这些,他们需要一个Mutex用于每次等待调用,这对我来说就像我不能将数值放到信号量上(因为我有七个理发店,3理发师等)。 我想我需要一个Counting Semaphore,但我认为Ruby(我能找到的)在其核心中包含这样一个类有点奇怪。 谁能帮助我指出正确的方向?

在Ruby中为mutex使用类实例变量

注意:下面显示的代码摘要不是我遇到问题的代码的精华。 我已经在这里留下了这个原始摘要,因为其他人已经回答了,但实际的代码显示在我在下面提供的答案中。 我无法将其与一个小的失败测试用例隔离开来,但是我使用以下常规构造失败了: class Foo @mutex = Mutex.new …. def self.bar @mutex.synchronize { … } end end 如果我创建多个线程来调用Foo.bar ,有时@mutex将在bar评估为nil 。 如果我使用常量(例如MUTEX)而不是实例变量,我没有这个问题。 我不知道它是否重要,但我在JRuby上使用多核机器运行。 我很感激如何解决问题的任何解释或帮助。 更新:我认为这与自动加载有关。 使用Rails,我能够在以下Rails自动加载目录之一中使用以下foo.rb内容重现类似问题: class Foo @mutex = Mutex.new def self.bar @mutex.synchronize {} end end 当我在Rails控制台中执行以下操作时: 1.upto(4).map { Thread.new { Foo.bar }}.map(&:join) 我收到以下错误: RuntimeError: Circular dependency detected while autoloading constant Foo from /Users/palfvin/.rvm/gems/jruby-1.7.10@javlats/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:461:in `load_missing_constant’ […]