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