Ruby Mutex无需等待即可同步

时间:2015-07-29 07:17:49

标签: ruby multithreading thread-safety mutex

http://ruby-doc.org/core-1.9.3/Mutex.html

Mutex.Synchronize是否有办法立即返回而不是等待获取锁定,如果它当时被另一个线程持有?

换句话说,与try_lock的行为相同。

1 个答案:

答案 0 :(得分:2)

synchronize

  

获取锁定,运行块,并在块完成时释放锁定。

这是Rubinius'implementation

class Mutex
  def synchronize
    lock
    begin
      yield
    ensure
      unlock
    end
  end
end

您可以轻松采用此功能编写自己的try_synchronize

class Mutex
  def try_synchronize
    return unless try_lock
    begin
      yield
    ensure
      unlock
    end
  end
end

如果没有给出阻止,MRI会抛出异常,因此您可能需要添加:

raise ThreadError, 'must be called with a block' unless block_given?