Niemożliwe. Po prostu zapisz wywołanie metody mutex.
Utwórz nowe Mutex wewnątrz klasy, dzięki czemu można używać tego samego obiektu mutex:
class Foo
attr_reader :my_val
def initialize
@my_mutex = Mutex.new
@my_val = 0
end
def bar
@my_mutex.synchronize do
# do something you want to be synchronized here, e.g.:
@my_val = @my_val + 1
end
end
def another_bar
@my_mutex.synchronize do
# do something you want to be synchronized here
@my_val = @my_val - 1
end
end
end
foo = Foo.new
threads = []
threads << Thread.new { 50.times { foo.bar }}
threads << Thread.new { 50.times { foo.another_bar }}
threads.map { |t| t.join } # wait for all threads to finish
puts foo.my_val # should print 0
Zobacz http://apidock.com/ruby/Mutex
Można też może zrobić METAPROGRAMOWANIE magii, aby chronić tylko swoje metody .. owijania metody dla ciebie, np tworzenie nowej zmodyfikowanej metody "bar" i "another_bar" z tym blokiem synchronizującym w środku.
Niestety moje pytanie jest podobne do linku w powyższym komentarzu. Proszę zamknąć to –
Nie będę głosować, aby zamknąć. Odpowiedź jest lepsza na tym. –