Junior — Middle
Care este diferența dintre o blocare normală și o blocare recursivă în sincronizarea firelor?
sobes.tech AI
Răspuns de la AI
Blocarea obișnuită (mutex) permite unui fir de execuție să preia o resursă, iar dacă același fir încearcă să o preia din nou, va fi blocat, ceea ce duce la un deadlock.
Blocarea recursivă (recursive mutex) diferă prin faptul că același fir poate să o preia de mai multe ori consecutiv fără a fi blocat. Totuși, blocarea trebuie eliberată de atâtea ori câte a fost preluată, pentru ca alte fire să poată avea acces.
Exemplu:
-
Blocare obișnuită:
- Firul A preia blocarea.
- Firul A încearcă să o preia din nou — este blocat pentru totdeauna.
-
Blocare recursivă:
- Firul A preia blocarea.
- Firul A o preia din nou — cu succes.
- Firul A eliberează blocarea de două ori, după care aceasta devine disponibilă pentru alte fire.