Junior — Middle
W jakich warunkach użycie main.sync nie spowoduje wzajemnego blokowania wątków?
sobes.tech AI
Odpowiedź od AI
Użycie DispatchQueue.main.sync nie spowoduje blokady wzajemnej (deadlock) tylko wtedy, gdy wywołanie nie pochodzi z głównego wątku. Jeśli wywołujesz main.sync z głównego wątku, ten wątek będzie oczekiwał na zakończenie bloku, który nie może się rozpocząć, ponieważ główny wątek jest już zajęty — co powoduje deadlock.
Przykład bezpiecznego użycia:
DispatchQueue.global().async {
DispatchQueue.main.sync {
// Aktualizacja UI
}
}
Tutaj wywołanie main.sync pochodzi z wątku tła, więc nie dochodzi do blokady. Główna zasada — nigdy nie wywołuj DispatchQueue.main.sync z głównego wątku.