Se poate aplica sincronizarea (synchronized) la o variabilă?
sobes.tech AI
Răspuns de la AI
Nu, cuvântul cheie synchronized nu există în Swift. Pentru sincronizarea accesului la variabile în medii multi-thread, se folosesc alte mecanisme:
-
Cozi de dispatch: Cozile seriale permit executarea blocurilor de cod în mod secvențial, garantând că doar un fir de execuție lucrează cu variabila în acel moment.
// Coadă serială pentru sincronizare let queue = DispatchQueue(label: "com.myapp.syncQueue") var sharedVariable = 0 func updateSharedVariable() { queue.sync { // Acces sincron la variabilă în interiorul cozii sharedVariable += 1 print(sharedVariable) } } -
NSLock/NSRecursiveLock: Permite blocarea accesului la o secțiune de cod.
import Foundation let lock = NSLock() var sharedArray = [Int]() func addToSharedArray(value: Int) { lock.lock() // Blocarea mutex-ului sharedArray.append(value) print("Adăugat: \(value). Array: \(sharedArray)") lock.unlock() // Eliberarea mutex-ului } -
Operații și Cozi de Operații: Oferă o modalitate de nivel înalt de a gestiona sarcini paralele, inclusiv dependențe și priorități.
-
@synchronized(Objective-C): În Objective-C exista un mecanism similar, dar nu este disponibil direct în Swift și necesită utilizarea de punți cu Objective-C. Se recomandă utilizarea soluțiilor native Swift (Dispatch Queues, Locks).
Alegerea mecanismului depinde de natura sarcinii. Cozile de dispatch sunt adesea cea mai convenabilă și eficientă metodă pentru sincronizarea simplă a accesului la date.