Sobes.tech
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.