Aklavietė yra būsena, kai dvi ar daugiau gijų kiekviena amžinai laukia ištekliaus, kurį laiko kitos, todėl nė viena negali tęsti. Jai reikia, kad keturios sąlygos galiotų vienu metu (Coffman sąlygos).
Aklavietė yra būsena, kai dvi ar daugiau gijų kiekviena amžinai laukia ištekliaus, kurį laiko kitos, todėl nė viena negali tęsti. Jai reikia, kad keturios sąlygos galiotų vienu metu (Coffman sąlygos).
Nutraukite bet kurią vieną, ir aklavietė tampa neįmanoma.
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), atsitraukite ir kartokite — nutraukia laikyk-ir-lauk.Aklavietės tyliai užšaldo sistemas — jokios strigties, tik pakibusios užklausos. Keturių sąlygų įvardijimas parodo, kad galite samprotauti, kodėl tai nutinka, ir pasirinkti tikslinę prevenciją (paprastai nuoseklią užrakinimo tvarką), o ne barstyti užraktus ir tikėtis.
IT pokalbių klausimų biblioteka su išsamiais atsakymais — nuo Junior iki Senior.
Paaukoti