Single Threaded Execution Ruby版

Single Threaded Executionをrubyで書いてみた。

class Gate
    def initialize()
        @counter = 0
        @name = "Nobody"
        @address = "Nowhere"
    end

    def pass(name, address)
        @counter += 1
        @name = name
        @address = address
        check
    end

    def toString()
        return "No." + @counter.to_s + ": " + @name.to_s + ", " + @address.to_s
    end

    def check()
        if @name[0] != @address[0]
            puts "***** BROKEN ***** " + toString()
        end
    end
end

def go(gate, name, address)
    t = Thread.new do
        puts name + " begin"
        while true
            gate.pass(name, address)
        end
    end
    return t
end

gate = Gate.new()
aliceThread = go(gate, "Alice", "Alaska")
bobbyThread = go(gate, "Bobby", "Blazil")
chrisThread = go(gate, "Chris", "Canada")

aliceThread.join
bobbyThread.join
chrisThread.join

こちらは、簡単に競合状態が発生した。

昼ごはんは、ご飯、塩ジャケ、納豆。
晩ごはんのおかずは、ゴーヤーチャンプルー、大根と揚げの味噌汁。