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 се неће догодити.