Pode-se aplicar sincronização (synchronized) a uma variável?
sobes.tech IA
Resposta da IA
Não, a palavra-chave synchronized não existe em Swift. Para sincronizar o acesso às variáveis em ambientes multithread, utilizam-se outros mecanismos:
-
Filas de despacho: As filas seriais permitem executar blocos de código sequencialmente, garantindo que apenas um thread trabalhe com a variável naquele momento.
// Fila serial para sincronização let queue = DispatchQueue(label: "com.myapp.syncQueue") var sharedVariable = 0 func updateSharedVariable() { queue.sync { // Acesso síncrono à variável dentro da fila sharedVariable += 1 print(sharedVariable) } } -
NSLock/NSRecursiveLock: Permitem bloquear o acesso a uma secção de código.
import Foundation let lock = NSLock() var sharedArray = [Int]() func addToSharedArray(value: Int) { lock.lock() // Captura do mutex sharedArray.append(value) print("Adicionado: \(value). Array: \(sharedArray)") lock.unlock() // Liberação do mutex } -
Operações e Filas de Operações: Oferecem uma forma de alto nível para gerir tarefas paralelas, incluindo dependências e prioridades.
-
@synchronized(Objective-C): Em Objective-C, existia um mecanismo semelhante, mas não está disponível diretamente em Swift e requer o uso de pontes com Objective-C. Recomenda-se usar soluções nativas de Swift (Dispatch Queues, Locks).
A escolha do mecanismo depende da natureza da tarefa. As Filas de despacho costumam ser a forma mais conveniente e eficiente para uma sincronização simples do acesso a dados.