インスタンスのメソッドをロックする場合はMutex
、すべてのインスタンスとメソッドに対してを作成する必要があります。
class Foo
def initialize
@blue_mutex = Mutex.new
@red_mutex = Mutex.new
end
def blue
@blue || @blue_mutex.synchronize do
@blue ||= Blue.new
end
end
def red_mutex
@red || @red_mutex.synchronize do
@red ||= Red.new
end
end
end
Thread.exclusive
引数を取ることに論理的なエラーはありますか?
class Foo
def blue
@blue || Thread.exclusive("#{object_id}/blue") do
@blue ||= Blue.new
end
end
def red
@red || Thread.exclusive("#{object_id}/red") do
@red ||= Red.new
end
end
end
Thread.exclusive
排他性の範囲を定義する引数を取ることができるのに、なぜミューテックスを作成するのですか?