Ho guardato questi anni WWDC GCD parlare ultimamente e penso che ci sia uno snippet di codice con cui qualcosa non va. Si tratta di rendere una proprietà thread safe utilizzando DispatchQueues.Sincronizza proprietà in Swift 3 tramite GCD
class MyObject {
private var internalState: Int
private let internalQueue: DispatchQueue // Serial or Concurrent?
var state: Int {
get {
return internalQueue.sync { internalState }
}
set (newState) {
internalQueue.sync { internalState = newState }
}
}
}
usano un DispatchQueue per bloccare una proprietà. Ma penso che questo snippet non sia valido, perché il valore internalQueue potrebbe essere simultaneo. Quindi, se chiamiamo il setter da due diversi DispatchQueues/Thread se quella coda interna non è seriale, potrebbe anche portare a problemi di threading giusto? Perché nella mia comprensione sincronizzazione tiene solo il thread di richiamo e continua se l'attività è completa. Cosa ne pensi di questo frammento? Ho sbagliato?
Sì, si definirà internalQueue come una coda di invio * seriale *. –