make specific objects into monitors.
require 'monitor' class Counter attr_reader :count def initialize @count = 0 end def tick @count += 1 end end c = Counter.new c.extend(MonitorMixin) t1 = Thread.new { 10000.times { c.synchronize { c.tick } } } t2 = Thread.new { 10000.times { c.synchronize { c.tick } } } t1.join; t2.join c.count # 20000