Я смотрел в этом году WWDC GCD говорить в последнее время, и я думаю, что есть фрагмент кода, с которым что-то не так. Речь идет о том, чтобы сделать свойство потокобезопасным, используя DispatchQueues.Синхронизация свойств в Swift 3 с использованием 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 }
}
}
}
Они используют DispatchQueue заблокировать свойство. Но я думаю, что этот снипп недействителен, потому что internalQueue может быть одновременно. Итак, если мы вызываем сеттер из двух разных DispatchQueues/Threads, если эта внутренняя очередь не является последовательной, это также может привести к проблемам с потоками? Потому что в моем понимании синхронизация просто удерживает вызывающий поток и продолжается, если задача завершена. Что вы думаете об этом фрагменте? Я ошибаюсь?
Да, вы бы определили innerQueue как * serial * dispatch queue. –