Sha256: a416481250c9851d024d754bc3c9d345c001ba99923de33c720cf2dc0f1d2758

Contents?: true

Size: 921 Bytes

Versions: 1

Compression:

Stored size: 921 Bytes

Contents

require 'monitor'

module Redistat
  module Synchronize
    
    class << self
      def included(base)
        base.send(:include, InstanceMethods)
      end
      
      def monitor
        @monitor ||= Monitor.new
      end
      
      def thread_safe
        monitor.synchronize do
          @thread_safe ||= false
        end
      end
      
      def thread_safe=(value)
        monitor.synchronize do
          @thread_safe = value
        end
      end
    end # << self
    
    module InstanceMethods
      def thread_safe
        Synchronize.thread_safe
      end
      
      def thread_safe=(value)
        Synchronize.thread_safe = value
      end
      
      def monitor
        Synchronize.monitor
      end
      
      def synchronize(&block)
        if thread_safe
          monitor.synchronize(&block)
        else
          block.call
        end
      end
    end # InstanceMethods
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
redistat-0.3.0 lib/redistat/mixins/synchronize.rb