Tôi đã xem năm này WWDC GCD nói gần đây và tôi nghĩ rằng có một đoạn mã có gì đó không ổn. Đó là về việc tạo một chuỗi an toàn cho thuộc tính bằng cách sử dụng DispatchQueues.Đồng bộ hóa các thuộc tính trong Swift 3 bằng cách sử dụng 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 }
}
}
}
Họ sử dụng một DispatchQueue để khóa một tài sản. Nhưng tôi nghĩ đoạn mã này không hợp lệ, vì internalQueue có thể đồng thời. Vì vậy, nếu chúng ta gọi setter từ hai khác nhau DispatchQueues/Threads nếu hàng đợi nội bộ đó không phải là nối tiếp, nó cũng có thể dẫn đến vấn đề luồng phải không? Bởi vì trong sự hiểu biết của tôi đồng bộ chỉ giữ thread gọi và tiếp tục nếu nhiệm vụ hoàn tất. Bạn nghĩ gì về đoạn mã này? Liệu tôi có sai?
Có, bạn sẽ xác định internalQueue dưới dạng hàng đợi * nối tiếp *. –