我在我的ruby代码中使用mutex跨越许多文件。为了解决这个问题,我创建了一个单例类,其中包含一个我一直使用的互斥对象:
class LockBlock
include Singleton
def initialize
@lock = Mutex.new
end
def lock
@lock
end
end
我有两个问题:
LockBlock.instance.lock.synchronize {
# code here..
}
这有什么捷径吗?也许要声明锁定功能所以我可以这样写:
LockBlock.lock {
# code here..
}
由于
答案 0 :(得分:0)
LockBlock
本身就是一个对象,可用于存储@lock
实例,它是整个应用程序中的单例。
您可以将它用于全局单例锁:
class LockBlock
@lock = Mutex.new
class << self
Mutex.instance_methods(false).each do |method|
define_method(method) do |&block|
@lock.send(method, &block)
end
end
end
end
# Now LockBlock is a Mutex like singleton object
# and you can use it anywhere in your application (load when necessary)
LockBlock.lock
begin
puts LockBlock.owned?
ensure
LockBlock.unlock
end
LockBlock.synchronize { puts LockBlock.owned? }
IMO单例模式在Java中更像是静态OO语言,在动态语言中没有用。