Livelock: อะไรคือความแตกต่างกับ Deadlock
⚡ สรุปอย่างชาญฉลาด
Livelock คือสถานการณ์การทำงานพร้อมกันที่กระบวนการต่างๆ เปลี่ยนสถานะของตนเองอย่างต่อเนื่องเพื่อตอบสนองต่อกันและกัน แต่ไม่มีความคืบหน้าใดๆ เกิดขึ้นจริง ยังคงทำงานอยู่และใช้ทรัพยากร CPU โดยไม่สามารถทำงานให้เสร็จสิ้นหรือหยุดทำงานได้เลย

ไลฟ์ล็อคคืออะไร?
A Livelock เป็นสถานการณ์ที่คำขอการล็อกแบบพิเศษถูกปฏิเสธซ้ำ ๆ เนื่องจากมีการทับซ้อนกันจำนวนมากping ล็อกที่ใช้ร่วมกันมักรบกวนซึ่งกันและกัน กระบวนการต่างๆ เปลี่ยนแปลงสถานะอยู่ตลอด ทำให้ไม่สามารถทำงานให้เสร็จสมบูรณ์ได้
ตัวอย่างของ Livelock
1 ตัวอย่าง:
ตัวอย่างที่ง่ายที่สุดของภาวะติดขัด (Livelock) คือคนสองคนที่พบกันในทางเดิน และต่างคนต่างหลบทางให้กันเดินผ่าน พวกเขาจึงขยับไปมาโดยไม่คืบหน้าไปไหน เพราะต่างก็ขยับไปในทิศทางเดียวกันและในเวลาเดียวกัน ในกรณีนี้ พวกเขาจึงไม่เคยเดินสวนกันเลย
2 ตัวอย่าง:
ในภาพด้านบน กระบวนการทั้งสองต้องการทรัพยากรสองอย่าง และใช้การตรวจสอบสถานะเบื้องต้น (polling) เพื่อพยายามขอรับล็อกที่ต้องการ หากความพยายามครั้งแรกไม่สำเร็จ วิธีการนี้จะลองอีกครั้ง
- กระบวนการ A ถือครองทรัพยากร Y
- กระบวนการ B ถือทรัพยากร X
- กระบวนการ A ต้องการทรัพยากร X
- กระบวนการ B ต้องการทรัพยากร Y
สมมติว่ากระบวนการ A ทำงานก่อนและได้รับทรัพยากร X จากนั้นกระบวนการ B ทำงานและได้รับทรัพยากร Y ไม่ว่ากระบวนการใดจะทำงานก่อน กระบวนการทั้งสองก็จะไม่สามารถดำเนินการต่อไปได้
อย่างไรก็ตาม กระบวนการทั้งสองไม่ได้ถูกบล็อก พวกมันใช้ทรัพยากร CPU ซ้ำ ๆ โดยไม่คืบหน้าใด ๆ แต่ก็ไม่เคยหยุดเพื่อรอการประมวลผลบล็อกเลย
ดังนั้น สถานการณ์นี้จึงไม่ใช่ การหยุดชะงักเนื่องจากไม่มีกระบวนการใดถูกบล็อกเลย แต่เรากลับเผชิญกับสถานการณ์ที่เทียบเท่ากับภาวะชะงักงัน ซึ่งเรียกว่าภาวะชะงักงันแบบมีชีวิต (LIVELOCK)
อะไรนำไปสู่ Livelock?
ภาวะติดขัด (Livelock) เกี่ยวข้องกับจำนวนกระบวนการที่ระบบอนุญาต ซึ่งกำหนดโดยจำนวนรายการทั้งหมดในตารางกระบวนการ ดังนั้น ช่องในตารางกระบวนการเหล่านี้จึงถือเป็นทรัพยากรที่มีจำกัด เมื่อกระบวนการต่างๆ พยายามเข้าถึงทรัพยากรที่จำกัดเหล่านี้ซ้ำแล้วซ้ำเล่า ในขณะที่ต่างฝ่ายต่างยอมให้กันและกันอยู่ตลอดเวลา ก็จะไม่มีกระบวนการใดคืบหน้า และระบบก็จะเข้าสู่ภาวะติดขัด
Deadlock คืออะไร?
A การหยุดชะงัก เดดล็อก (Deadlock) คือสถานการณ์ที่เกิดขึ้นในระบบปฏิบัติการ เมื่อกระบวนการหนึ่งเข้าสู่สถานะรอคอย เนื่องจากกระบวนการรอคอยอื่นกำลังครอบครองทรัพยากรที่ต้องการอยู่ เดดล็อกเป็นปัญหาที่พบได้บ่อยในระบบมัลติโปรเซสซิ่ง ซึ่งหลายกระบวนการใช้ทรัพยากรเฉพาะประเภทหนึ่งร่วมกัน ซึ่งเรียกว่าซอฟต์ล็อกหรือซอฟต์แวร์ล็อก (Softlock หรือ Software Lock)
ตัวอย่างของ Deadlock
- ตัวอย่างในโลกแห่งความเป็นจริงก็คือ การจราจรที่วิ่งไปในทิศทางเดียวเท่านั้น
- ที่นี่สะพานถือเป็นทรัพยากร
- เมื่อเกิดภาวะชะงักงัน สามารถแก้ไขได้ง่ายโดยการถอยรถคันใดคันหนึ่ง (แย่งชิงทรัพยากรและถอยกลับ)
- รถหลายคันอาจต้องจอดสำรองหากเกิดสถานการณ์ทางตัน
- ดังนั้น ความอดอยากจึงเป็นไปได้
ตัวอย่างของ Deadlock
ความอดอยากคืออะไร?
ภาวะอดอยากคือสถานการณ์ที่กระบวนการที่มีลำดับความสำคัญต่ำถูกบล็อก ในขณะที่กระบวนการที่มีลำดับความสำคัญสูงดำเนินการต่อไป ในระบบใดๆ ก็ตาม การร้องขอทรัพยากรที่มีลำดับความสำคัญสูงและต่ำจะเกิดขึ้นอย่างต่อเนื่อง ดังนั้นจึงจำเป็นต้องมีนโยบายบางอย่างเพื่อตัดสินใจว่าใครจะได้รับบริการและเมื่อใด
ในบางอัลกอริทึม กระบวนการบางอย่างอาจไม่ได้รับการบริการที่ต้องการ แม้ว่าจะไม่ได้อยู่ในภาวะหยุดชะงักก็ตาม ภาวะอดอยากเกิดขึ้นเมื่อเธรดบางส่วนทำให้ทรัพยากรที่ใช้ร่วมกันไม่สามารถใช้งานได้เป็นเวลานาน
ตัวอย่างความอดอยาก
ตัวอย่างเช่น อ็อบเจ็กต์หนึ่งมีเมธอดแบบซิงโครไนซ์ที่อาจใช้เวลานานในการส่งค่ากลับ หากเธรดหนึ่งใช้เมธอดนี้บ่อยๆ เธรดอื่นๆ ที่ต้องการเข้าถึงอ็อบเจ็กต์เดียวกันโดยใช้เมธอดแบบซิงโครไนซ์บ่อยๆ ก็มักจะถูกบล็อกไปด้วย
ความแตกต่างระหว่าง Deadlock, Starvation และ Livelock
- ภาวะติดตาย (Deadlock) คือสถานการณ์ที่เกิดขึ้นในระบบปฏิบัติการ เมื่อกระบวนการหนึ่งเข้าสู่สถานะรอคอย เนื่องจากทรัพยากรที่ต้องการนั้นถูกกระบวนการอื่นที่รอคอยอยู่ครอบครองอยู่
- ในทางกลับกัน ภาวะติดขัดแบบมีชีวิต (livelock) เกือบจะคล้ายกับภาวะติดตาย (deadlock) เพียงแต่สถานะของกระบวนการที่เกี่ยวข้องในภาวะติดขัดแบบมีชีวิตจะเปลี่ยนแปลงอยู่ตลอดเวลาเพื่อตอบสนองต่อกันและกัน โดยไม่มีกระบวนการใดคืบหน้าไปได้
- ดังนั้น ภาวะชะงักงันจึงเป็นกรณีพิเศษของการขาดแคลนทรัพยากร


