Deadlock არის მდგომარეობა, სადაც ორი ან მეტი thread თითოეული სამუდამოდ ელოდება რესურსს, რომელსაც სხვები იჭერენ, ამიტომ ვერცერთი ვერ აგრძელებს. ის საჭიროებს ოთხი პირობის ერთდროულ დაცვას (Coffman-ის პირობები).
Deadlock არის მდგომარეობა, სადაც ორი ან მეტი thread თითოეული სამუდამოდ ელოდება რესურსს, რომელსაც სხვები იჭერენ, ამიტომ ვერცერთი ვერ აგრძელებს. ის საჭიროებს ოთხი პირობის ერთდროულ დაცვას (Coffman-ის პირობები).
დაარღვიეთ ერთი მაინც და deadlock შეუძლებელია.
Thread 1 holds A, wants B ─┐
├─ circular wait → deadlock
Thread 2 holds B, wants A ─┘
# DEADLOCK: thread-ები ბლოკავენ საპირისპირო რიგით
def t1():
with lockA:
with lockB: ... # T1: A შემდეგ B
def t2():
with lockB:
with lockA: ... # T2: B შემდეგ A ← ციკლი!
# გამოსწორება: დააწესეთ გლობალური lock რიგი (ყოველთვის A B-მდე)
def safe():
with lockA:
with lockB: ... # ყველა იღებს ერთი და იმავე რიგით
tryAcquire(timeout), უკან დაიხიეთ და ხელახლა სცადეთ — არღვევს hold-and-wait-ს.Deadlock-ები ჩუმად აყინებენ სისტემებს — ავარიის გარეშე, უბრალოდ ჩამოკიდებული მოთხოვნები. ოთხი პირობის დასახელება აჩვენებს, რომ შეგიძლიათ იმსჯელოთ, რატომ ხდება ის და აირჩიოთ მიზნობრივი აღკვეთა (ჩვეულებრივ თანმიმდევრული lock ordering), ვიდრე lock-ების შემოფანტვა და იმედის ქონა.
IT გასაუბრების კითხვების ბიბლიოთეკა დეტალური პასუხებით — Junior-დან Senior-მდე.
შემოწირულობა