Sobes.tech
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.