Concurrent2
Access to a shared variable คือ function main สร้าง new thread มา 2 ตัว ใช่มั๊ยนะ ลองกด run รัวๆ จะได้ output สลับกันไป
*** แต่ถ้าเป็นกรณีนี้ (ไม่ว่าจะสั่ง print หรือ thread.yield();=ยอมให้คนอื่นทำงานก่อน ) output จะเป็น
ซึ่ง tmp-t0 กับ tmp-t1 ก็เลยมีค่าเป็น 0 ทั้งคู่ พอเข้าบรรทัด x=tmp+1 ค่า x ตอนท้ายก็เลยเป็น 1 ทั้งคู่ *** มาดู race condition ของโค๊ดนี้อีกรอบ มี x=0 เป็น ตัวแปรร่วม
*** atomic คือ บรรทัดคำสั่งบรรทัดนึง ซึ่งจะมีค่คำสั่งเดียว แบ่งแยกไม่ได้ control pointer คือ ตัวชี้ เลขชี้บรรทัด ว่าตอนนี้ ทำงานอยู่บรรทัดไหน interleaving แปลว่า การสอดแทรก คือการที่แต่ละโปรเซสสลับการทำงานได้? แทรกคั่นกลางกันได้? ไม่ต้องรอให้ฝ่ายใดฝ่ายนึงทำงานจนเสร็จก่อน *** *** State คือ เซ็ต/กรุ๊ป ของ (เลขcontrol pointer,ค่าของตัวแปร(หลายค่าก็ได้)) **ค่าตัวแปร ตอนเข้า state (คือตัวแปรที่ได้มาจากoperationของstateก่อนหน้า)ไม่ใช่ตอนจบ state Transition คือ คู่ลำดับ ของ (State ปัจจุบัน, State ถัดไป) cp=1 , tmp=ยังไม่init -> tmp=0 cp=2 , tmp=x; -> tmp=0 cp=end, x=tmp+1; -> x=1 |