Sobes.tech
Junior — Middle

Каква е разликата между обикновен блок и рекурсивен блок при синхронизация на нишки?

sobes.tech AI

Отговор от AI

Обикновен блок (mutex) позволява на нишка да завземе ресурс, и ако същата нишка се опита да го завземе отново, тя ще бъде блокирана, което води до взаимна блокировка (deadlock).

Рекурсивният блок (recursive mutex) се различава по това, че същата нишка може да го завземе няколко пъти подред без да бъде блокирана. Въпреки това, блокът трябва да бъде освободен толкова пъти, колкото е бил завзет, за да могат други нишки да получат достъп.

Пример:

  • Обикновен блок:

    • Нишка A завзема блока.
    • Нишка A се опитва да го завземе отново — блокира се завинаги.
  • Рекурсивен блок:

    • Нишка A завзема блока.
    • Нишка A го завзема отново — успешно.
    • Нишка A освобождава блока два пъти, след което той става достъпен за други нишки.