/ / Aký je najlepší spôsob, ako deklarovať skratku mutex a mutex.synchronize? - rubín, singleton, mutex

Aký je najlepší spôsob deklarácie skratky mutex a mutex.synchronize? - ruby, singleton, mutex

Používam mutex v rubínovom kóde v mnohých súboroch. aby som sa zaoberal tým, že som vytvoril triedu singleton s jedným mutexovým objektom, ktorý používam po celú dobu:

class LockBlock
include Singleton

def initialize
@lock = Mutex.new
end

def lock
@lock
end
end

Mám dve otázky:

  1. Je to najlepší spôsob, ako deklarovať svoj mutex objekt? Mám použiť modul namiesto Singleton? Používam ho v mnohých súboroch ..
  2. Ak ju používam takto, zakaždým, keď uzamknem blok, musím napísať:

LockBlock.instance.lock.synchronize { # code here.. }

Existuje skratka pre toto? možno vyhlásiť funkciu uzamknutia, takže budem schopný napísať niečo takéto:

LockBlock.lock {
# code here..
}

Vďaka

odpovede:

0 pre odpoveď č. 1

LockBlock je samotný objekt, ktorý možno použiť na ukladanie @lock a je to jediný v celej aplikácii.

Môžete ho použiť pre globálny singleton zámok:

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 model singleton sa v jazyku Java používa skôr ako statický jazyk OO, nie je užitočný v dynamickom jazyku.