http://ruby-doc.org/core-1.9.3/Mutex.html
Mutex.Synchronize是否有办法立即返回而不是等待获取锁定,如果它当时被另一个线程持有?
换句话说,与try_lock的行为相同。
答案 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?