தڿਓ(.01&1"#0JODʲϖύϘºϓϨΠυʳ5FDI.FFUVQʙࣗಈςετɾ$*ฤʙฒߦɾฒྻॲཧͷςετ͍͠
View Slide
8ΞϓϦέʔγϣϯΤϯδχΞػೳ։ൃνʔϜதڿਓ ͖͋ͬʔ!/","/0@"LJIJUP&$ࣄۀ෦ΧϥʔϛʔγϣοϓάϧʔϓIUUQBDLJOUPTIHJUIVCJP
Χϥʔϛʔγϣοϓ
܅ϖύϘͰಇ͔ͳ͍͔ʁ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU
ฒߦɾฒྻॲཧͷςετ
ฒߦɾฒྻॲཧʁԿʹ͍ͭͯͷൃදͳͷ͔Πϝʔδ͍͢͠Α͏ʹ͡Ίʹ໌֬ʹ͓͖ͯ͠·͢ʂ
ฒߦɺฒྻɺඇಉظɺࢄʜϚϧνεϨουϚϧνϓϩηεͪ͜Βʹ͍ͭͯͷൃදͰ͢ཧతʹಠཱͨ͠ෳͷϊʔυͰฒߦɾฒྻ
ͳͥฒߦɾฒྻॲཧΛςʔϚʹʁ
ฒߦɾฒྻॲཧɹ׆༻ͷྲྀΕwϓϩηοαߴԽ͔ΒϚϧνίΞwϦιʔεΛޮతʹ׆༻͢ΔͨΊʹฒߦɾฒྻॲཧ͕͞ΕΔwฒߦɾฒྻॲཧ͕ಘҙͳݴޠ͕ʹw3VCZձٞͰ(VJME͕ఏҊ͞Εͨ
1)1
4OJEFM εφΠσϧIUUQTHJUIVCDPNBDLJOUPTITOJEFMखܰʹϚϧνϓϩηεͰ͖Δࢠϓϩηεͷॲཧ݁ՌΛड͚औΕΔϚελʔʗϫʔΧʔϞσϧ1)1Ҏ্
ϓϧϦΫΤετܴʂIUUQTHJUIVCDPNBDLJOUPTITOJEFM
ຊ
ฒߦɾฒྻॲཧͷ͠͞Λςετͷ؍Ͱ
λΠϛϯά
ϓϩμΫτίʔυclass Foodef runThread.new do# ৭ʑ@done = trueend# ৭ʑendend
ςετίʔυclass FooTest < Test::Unit::TestCasedef test_run(foo = Foo.new).runsleep 1assert_true foo.doneendend
ςετίʔυclass FooTest < Test::Unit::TestCasedef test_run(foo = Foo.new).runsleep 1assert_true foo.doneendendෆ҆ఆ
εςοϓॲཧΛΓग़͢
ϓϩμΫτίʔυ͜ΕΛʜclass Foodef runThread.new do# ৭ʑ@done = trueend# ৭ʑendend
ϓϩμΫτίʔυ͜͏ʂclass Foodef runThread.new do# ৭ʑ@done = self.doend# ৭ʑenddef do# ৭ʑtrueendend
ςετίʔυ͜ΕΛʜclass FooTest < Test::Unit::TestCasedef test_run(foo = Foo.new).runsleep 1assert_true foo.doneendend
ςετίʔυ͜͏ʂclass FooTest < Test::Unit::TestCasedef test_run(foo = Foo.new).runsleep 1assert_true foo.doneenddef test_doassert_true Foo.new.doendend
ඇಉظͳ෦Λಉظॲཧͱͯ͠ςετͰ͖ΔΑ͏ʹͳͬͨʂ
)VNCMF0CKFDUύλʔϯY6OJU5FTU1BUUFSOT$I
͕͔ͩ͠͠
ςετίʔυ·ͩղܾ͍ͯ͠ͳ͍ʜclass FooTest < Test::Unit::TestCasedef test_run(foo = Foo.new).runsleep 1assert_true foo.doneenddef test_doassert_true Foo.new.doendendෆ҆ఆ
εςοϓϝοηʔδύογϯάΛ͏
lϝϞϦͷ্ͰγΣΞ͢ΔͷͰͳ͘ίϛϡχέʔγϣϯͰγΣΞ͢Δz4J[FE2VFVFΛͬͯͦΕͬΆ͍͜ͱΛΓ·͢
ϓϩμΫτίʔυ͜ΕΛʜclass Foodef runThread.new do# ৭ʑ@done = self.doend# ৭ʑenddef do# ৭ʑtrueendend
ϓϩμΫτίʔυ͜͏ʂclass Foodef initialize@done = SizedQueue.new(1)enddef runThread.new do# ৭ʑ@done << self.doend# ৭ʑend… (ུ) …end
ςετίʔυ͜ΕΛʜclass FooTest < Test::Unit::TestCasedef test_run(foo = Foo.new).runsleep 1assert_true foo.doneenddef test_doassert_true Foo.new.doendend
ςετίʔυ͜͏ʂclass FooTest < Test::Unit::TestCasedef test_run(foo = Foo.new).runassert_true foo.done.popenddef test_doassert_true Foo.new.doendend
λΠϛϯάղܾʂ
ଞʹw εϥΠυͰ൚༻తͳςΫχοΫͷ͝հͰ͕ͨ͠w ݴޠϑϨʔϜϫʔΫ͕ఏڙ͢Δศརػೳ͋Γ·͢w ྫ(Pݴޠͷ3BDF%FUFDUPS
·ͱΊ
·ͱΊw ฒߦɾฒྻॲཧͷ͠͞ʹςετͰର߅Ͱ͖Δw ಛ༗ͷϓϥΫςΟε͕͋Δw ݟΛڞ༗͍͖ͯ͠·͠ΐ͏ʂʂ̍