Deadlock คือสภาวะที่ thread สองตัวหรือมากกว่าต่างรอทรัพยากรที่อีกฝ่ายถือไว้ตลอดกาล จนไม่มีฝ่ายใดเดินหน้าได้ มันต้องมีเงื่อนไขสี่ข้อเกิดขึ้นพร้อมกัน (Coffman conditions)
Deadlock คือสภาวะที่ thread สองตัวหรือมากกว่าต่างรอทรัพยากรที่อีกฝ่ายถือไว้ตลอดกาล จนไม่มีฝ่ายใดเดินหน้าได้ มันต้องมีเงื่อนไขสี่ข้อเกิดขึ้นพร้อมกัน (Coffman conditions)
ทำลายข้อใดข้อหนึ่งก็ทำให้ deadlock เกิดไม่ได้
Thread 1 holds A, wants B ─┐
├─ circular wait → deadlock
Thread 2 holds B, wants A ─┘
# DEADLOCK: threads lock in opposite orders
def t1():
with lockA:
with lockB: ... # T1: A then B
def t2():
with lockB:
with lockA: ... # T2: B then A ← cycle!
# FIX: impose a global lock ordering (always A before B)
def safe():
with lockA:
with lockB: ... # everyone acquires in the same order
tryAcquire(timeout), ถอยแล้วลองใหม่ — ทำลาย hold-and-waitDeadlock ทำให้ระบบค้างแบบเงียบ ๆ — ไม่ crash มีแต่ request ที่ค้าง การระบุชื่อเงื่อนไขทั้งสี่แสดงว่าคุณสามารถให้เหตุผลได้ว่า ทำไม มันจึงเกิด และเลือกวิธีป้องกันที่ตรงจุด (มักเป็น lock ordering ที่สอดคล้องกัน) แทนที่จะโปรย lock ไปทั่วแล้วภาวนา
คลังคำถามสัมภาษณ์งาน IT พร้อมคำตอบโดยละเอียด — ตั้งแต่ระดับ Junior ถึง Senior
บริจาค