Deadlock ialah keadaan di mana dua atau lebih thread masing-masing menunggu selama-lamanya untuk sumber yang dipegang oleh yang lain, jadi tiada yang boleh meneruskan. Ia memerlukan empat syarat untuk dipenuhi secara serentak (syarat Coffman).
Deadlock ialah keadaan di mana dua atau lebih thread masing-masing menunggu selama-lamanya untuk sumber yang dipegang oleh yang lain, jadi tiada yang boleh meneruskan. Ia memerlukan empat syarat untuk dipenuhi secara serentak (syarat Coffman).
Pecahkan mana-mana satu dan deadlock menjadi mustahil.
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), berundur dan cuba semula — memecahkan hold-and-wait.Deadlock membekukan sistem secara senyap — tiada nahas, hanya permintaan yang tergantung. Menamakan empat syarat menunjukkan anda boleh menaakul tentang mengapa ia berlaku dan memilih pencegahan yang bersasar (biasanya susunan lock yang konsisten), dan bukannya menaburkan lock dan berharap.
Pustaka soalan temu duga IT dengan jawapan terperinci — daripada Junior hingga Senior.
Derma