Sobes.tech
Junior — Middle

Ի՞նչ պայմաններում main.sync-ի օգտագործումը չի հանգեցնի թելերի փոխադարձ փակման։

sobes.tech AI

Պատասխան AI-ից

DispatchQueue.main.sync-ի օգտագործումը չի առաջացնի փոխադարձ բլոկավորում (deadlock) միայն այն դեպքում, երբ կանչը կատարվում է ոչ գլխավոր հոսքից։ Եթե դուք կանչեք main.sync գլխավոր հոսքից, այդ հոսքը կսպասի բլոկի ավարտին, որը չի կարող սկսվել, քանի որ գլխավոր հոսքը արդեն զբաղված է — սա հանգեցնում է deadlock-ի։

Անվտանգ օգտագործման օրինակ՝

DispatchQueue.global().async {
    DispatchQueue.main.sync {
        // UI թարմացում
    }
}

Այստեղ, main.sync-ի կանչը կատարվում է ֆոնային հոսքից, հետևաբար, բլոկավորում չի առաջանում։ Հիմնական կանոնը՝ երբեք չկապեք DispatchQueue.main.sync-ը գլխավոր հոսքից։