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-ը գլխավոր հոսքից։