Sobes.tech
Middle

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.