Sobes.tech
Middle

Šta je stanje blokade?

sobes.tech АИ

Одговор од АИ

Stanje blokade (lock contention) javlja se kada više niti ili procesa istovremeno pokušava da dobije ekskluzivni pristup zajedničkom resursu (npr. promenljivoj, fajlu ili zaključavanju), koji je zaštićen mehanizmom zaključavanja. To dovodi do toga da se neki od njih zaustavljaju i čekaju oslobađanje resursa.

Glavni uzroci:

  • Višestruko niti/multiprocesiranje.
  • Zajednički menjivi resursi.
  • Neoptimalna upotreba zaključavanja (preduga ili granulirana zaključavanja).

Posledice:

  • Smanjenje performansi zbog čekanja.
  • Povećanje troškova upravljanja zaključavanjima.
  • Mogući deadlockovi (zaglavljivanja) pri pogrešnoj upotrebi.

Načini minimizacije:

  • Smanjenje vremena tokom kojeg je resurs zaključan.
  • Korišćenje manje granuliranih zaključavanja (zaključavanje samo potrebnog dela resursa).
  • Primena atomskih operacija, ako je moguće.
  • Korišćenje struktura podataka bez zaključavanja.
  • Horizontalno skaliranje, ako arhitektura to omogućava.

Primer koda u Pythonu koji demonstrira konkurenciju za zaključavanje:

import threading
import time

lock = threading.Lock()
brojac = 0

def inkrement():
    global brojac
    # Dobijanje zaključavanja
    lock.acquire()
    try:
        # Simulacija rada
        time.sleep(0.01)
        brojac += 1
    finally:
        # Oslobađanje zaključavanja
        lock.release()

 niti = []
for _ in range(10):
    t = threading.Thread(target=inkrement)  # Kreiranje niti za povećanje
    niti.append(t)
    t.start()  # Pokretanje niti

for t in niti:
    t.join()  # Čekanje završetka svih niti

print(f"Konačna vrednost brojača: {brojac}")

Ovde lock.acquire() i lock.release() štite pristup brojac. Bez zaključavanja (ili u konkurenciji), krajnja vrednost može biti manja od 10 zbog uslova trke (race conditions).