Sobes.tech
Junior — Middle

Când v-ați confruntat cu situații de blocare mutuală a proceselor și cum le-ați rezolvat?

sobes.tech AI

Răspuns de la AI

Blocarea mutuală (deadlock) în Python poate apărea atunci când se lucrează cu fire sau procese, atunci când două sau mai multe procese așteaptă să elibereze resursele unul altuia.

De exemplu, două fire pot încerca să obțină două obiecte de blocare (Lock) în ordine diferită, ceea ce duce la un deadlock.

Pentru a rezolva astfel de situații, se aplică:

  • Evitarea blocărilor încrucișate sau întotdeauna obținerea blocărilor în aceeași ordine.
  • Utilizarea timeout-urilor la obținerea blocărilor pentru a evita așteptarea infinită.
  • Utilizarea primitive de sincronizare de nivel superior, cum ar fi RLock sau Semaphore.

Exemplu:

import threading

lock1 = threading.Lock()
lock2 = threading.Lock()

def thread1():
    with lock1:
        print("Thread 1 a obținut lock1")
        with lock2:
            print("Thread 1 a obținut lock2")

def thread2():
    with lock2:
        print("Thread 2 a obținut lock2")
        with lock1:
            print("Thread 2 a obținut lock1")

# Acest cod poate duce la un deadlock dacă ambele fire sunt lansate simultan.

Pentru a evita deadlock-ul, trebuie garantat că secvența de obținere a blocărilor este aceeași pentru toate firele.