From: "tobiassvn (Tobias Svensson)" Date: 2013-09-27T21:45:21+09:00 Subject: [ruby-core:57444] [CommonRuby - Feature #8961] Synchronizable module to easily wrap methods in a mutex Issue #8961 has been updated by tobiassvn (Tobias Svensson). Having this as a method on Module directly would of course be ideal. However, I believe the mutex/monitor used should still be exposed as a private method so it can be used without the 'synchronized' method. ---------------------------------------- Feature #8961: Synchronizable module to easily wrap methods in a mutex https://bugs.ruby-lang.org/issues/8961#change-42049 Author: tobiassvn (Tobias Svensson) Status: Open Priority: Normal Assignee: Category: Target version: I propose a Synchronizable mixin to easily wrap methods in a mutex which works together with Ruby 2.1's method name symbols returned from 'def'. The Mixin adds a new 'synchronized' class method which would alias the referenced method and redefines the original method wrapped in a 'synchronize do .. end' block. This is probably somewhat related and an alternative to #8556. -- Proof of concept (I've used Monitor here so potential users won't have to worry about reentrancy): require 'monitor' module Synchronizable module ClassMethods def synchronized(method) aliased = :"#{method}_without_synchronization" alias_method aliased, method define_method method do |*args, &block| monitor.synchronize do __send__(aliased, *args, &block) end end end end def monitor @monitor ||= Monitor.new end def self.included(base) base.extend(ClassMethods) end end class Foo include Synchronizable synchronized def bar # ... end end -- http://bugs.ruby-lang.org/