En deadlock är ett tillstånd där två eller fler trådar var och en väntar för evigt på en resurs som de andra håller, så att ingen kan gå vidare. Det kräver att fyra villkor är uppfyllda samtidigt (Coffman-villkoren).
En deadlock är ett tillstånd där två eller fler trådar var och en väntar för evigt på en resurs som de andra håller, så att ingen kan gå vidare. Det kräver att fyra villkor är uppfyllda samtidigt (Coffman-villkoren).
Bryt vilket som helst av dem och deadlock är omöjlig.
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), backa av och försök igen — bryter hold-and-wait.Deadlocks fryser system i tysthet — ingen krasch, bara hängande förfrågningar. Att namnge de fyra villkoren visar att du kan resonera om varför det händer och välja ett riktat förhindrande (vanligtvis konsekvent låsordning), istället för att strö lås omkring dig och hoppas.
Ett bibliotek med IT-intervjufrågor och detaljerade svar — från Junior till Senior.
Donera