संभव नहीं है। बस विधि कॉल को mutex पर लपेटें।
वर्ग के अंदर नई 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
देखें http://apidock.com/ruby/Mutex
तुम भी हो सकता है सिर्फ अपने तरीकों की रक्षा के लिए कुछ metaprogramming जादू कर सकता है .. रैपिंग तरीकों तुम्हारे लिए, उदाहरण के लिए नए संशोधित "बार" और "another_bar" विधि को इसके अंदर ब्लॉक सिंक्रनाइज़ करने के साथ।
स्रोत
2012-12-30 12:40:42
क्षमा करें मेरा प्रश्न उपरोक्त टिप्पणी में दिए गए लिंक के समान है। कृपया –
को बंद करने के लिए स्वतंत्र महसूस करें, मैं बंद करने के लिए वोट नहीं दूंगा। जवाब इस पर बेहतर है। –