Ich sah in diesem Jahr WWDC GCD reden in letzter Zeit, und ich denke, es gibt ein Code-Schnipsel, mit dem etwas nicht stimmt. Es geht darum, eine Eigenschaft Thread-Safe mit DispatchQueues.Synchronisieren Eigenschaften in Swift 3 mit 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 }
}
}
}
Sie verwenden eine DispatchQueue eine Eigenschaft zu sperren. Aber ich denke, dieses Snippet ist nicht gültig, weil die internalQueue gleichzeitig sein könnte. Also, wenn wir den Setter von zwei verschiedenen DispatchQueues/Threads aufrufen, wenn diese interne Warteschlange nicht seriell ist, könnte es auch zu Threading-Problemen führen, oder? Weil in meinem Verständnis sync nur den aufrufenden Thread enthält und fortfährt, wenn die Aufgabe abgeschlossen ist. Was denkst du über dieses Snippet? Liege ich falsch?
Ja, Sie würden internalQueue als * serielle * Dispatch-Warteschlange definieren. –