Single Threaded Execution Ruby版の続き

昨日のSingle Threaded Execution Ruby版は、スレッド間の競合が発生しているので、競合しないようにしないといけなかった。
Javaのようにクラスのメソッドにsynchronizedをつけるわけではなく、グローバル変数で用意したMutexでgo関数内のクリティカルセクションを囲む。

$mutex = Mutex.new

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

昼ごはんは、昨日と同じく、ご飯、塩ジャケ、納豆。
晩ごはんのおかずは、ベーコンともやし、にんじん、たまねぎ、ピーマンの炒め物、新じゃがの味噌煮。