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).