rubyスレッド操作(続き)同期スレッド
1054 ワード
rubyでは同期を実現する3つの方法を提供し,それぞれ同期を担当するMutexクラスのみの方法,データの受け渡しを兼ねたQueueメソッド,ConditionVariableクラスを用いて同期を実現する.
実行結果
実行結果は上と同じです
@num=200
@mutex=Mutex.new
def ticketNum(num)
@mutex.lock
Thread.pass
if (@num>=num)
@num=@num-num
puts" #{num} "
else
puts" , #{num} , "
end
@mutex.unlock
end
ticketsuccess=Thread.new(2){|num| ticketNum(num)}
ticketsuccess1=Thread.new(199){|num| ticketNum(num)}
ticketsuccess.join
ticketsuccess.join
実行結果
199
, 2 ,
はtry_を使用することもできます.lockとsynchronizeはスレッドをロックし、try_を使用します.lockの場合、別のリソースがロックされている場合、synchronizeを使用してfalseに戻ります.@num=200
@mutex=Mutex.new
def ticketNum(num)
@mutex.synchronize do
Thread.pass
if (@num>=num)
@num=@num-num
puts" #{num} "
else
puts" , #{num} , "
end
end
end
ticketsuccess=Thread.new(2){|num| ticketNum(num)}
ticketsuccess1=Thread.new(199){|num| ticketNum(num)}
ticketsuccess.join
ticketsuccess.join
実行結果は上と同じです