Does ruby have the Java equivalent of synchronize keyword?

后端 未结 2 1585
别那么骄傲
别那么骄傲 2020-12-16 01:30

Does ruby have the Java equivalent of synchronize keyword? I am using 1.9.1 and I don\'t quite see an elegant way to do this.

2条回答
  •  旧时难觅i
    2020-12-16 01:46

    It doesn't have the synchronize keyword, but you can get something very similar via the Monitor class. Here's an example from the Programming Ruby 1.8 book:

    require 'monitor'
    
    class Counter < Monitor
      attr_reader :count
      def initialize
        @count = 0
        super
      end
    
      def tick
        synchronize do
          @count += 1
        end
      end
    end
    
    c = Counter.new
    t1 = Thread.new { 100_000.times { c.tick } }
    t2 = Thread.new { 100_000.times { c.tick } }
    t1.join; t2.join
    c.count → 200000
    

提交回复
热议问题