Sobes.tech
Junior — Middle

Kako sprečiti međusobno blokiranje dva niti u višestrukoj niti?

sobes.tech АИ

Одговор од АИ

Међузависно блокирање (deadlock) настаје када два или више потеза заувек чекају да се ресурси ослободе један од другог. Да бисте спречили deadlock, можете користити следеће приступе:

  • Избегавање унутрашњих блокирања: минимизирајте број ресурса које истовремено добијате.
  • Редослед добијања ресурса: увек добијајте ресурсе у истом редоследу у свим потезима.
  • Користите timeout-ове: приликом покушаја добијања блокаде, користите timeout како бисте избегли бесконачно чекање.
  • Користите вишег нивоа примитиве за синхронизацију: на пример, из пакета java.util.concurrent у Android-у, који смањују вероватноћу deadlock-а.

Пример редоследног добијања ресурса:

synchronized (resourceA) {
    synchronized (resourceB) {
        // рад са ресурсима
    }
}

Ако сви потези поштују редослед најпре resourceA, затим resourceB, deadlock се неће догодити.