Tôi đã bắt đầu kiểm soát hàng đợi lần đầu tiên và cảm thấy như tôi có một xử lý tốt về cách sử dụng chúng và kudo cho Apple để làm cho chúng khá đơn giản để sử dụng.@synchronized vs GCD dispatch_barrier_async
Tuy nhiên, những gì tôi gặp phải là thách thức của nhiều chủ đề đọc và viết cho cùng một đối tượng. Trong this question Tôi nhận được this fine answer, và nó để lại cho tôi yêu cầu một số xác nhận từ mọi người để đảm bảo rằng tôi hiểu được ưu và nhược điểm của @synchronized
và GCD dispatch_barrier_async
.
Đây là cách tôi nhìn thấy nó:
@synchronized
PRO: Bạn có thể quấn bất kỳ đối tượng trong @synchronized
miễn là bạn có quyền truy cập/con trỏ đến nó, làm cho nó dễ dàng cho các mô hình dữ liệu dùng chung được an toàn xử lý từ các đối tượng khác nhau trong chương trình
PRO: được hỗ trợ bởi iOS 4 (và có thể sớm hơn)
`dispatch_barrier_async` with custom DISPATCH_QUEUE_CONCURRENT
PRO: Liệu nhanh hơn @synchronized
CON: DISPATCH_QUEUE_CONCURRENT chỉ có sẵn trong iOS 5 (như đã thảo luận here), vì vậy không có sẵn để hỗ trợ iOS 4
CON: Không dễ dàng để sử dụng khi kiểm soát đọc/ghi trên một đối tượng từ nhiều đối tượng khác, vì hàng đợi dễ dàng nhất chỉ có đối tượng tạo ra chúng (không cần phải làm việc để hạn chế giới hạn này)
Tóm lại, công cụ tốt nhất phụ thuộc vào nhu cầu của chương trình, trong việc xem xét ở trên.
Nếu có ai đó thêm hoặc chỉ ra điều gì đó, tôi đánh giá cao điều đó.
điểm của bạn 2) không áp dụng cho dispatch_barrier, vì bạn không thể sử dụng này trên một hàng đợi toàn cầu, chỉ có một hàng đợi tùy chỉnh đồng thời. Đối với việc đọc/ghi an toàn thread bằng cơ chế GCD, bạn cần một hàng đợi đồng thời tùy chỉnh. Được mô tả ở đây: http://www.mikeash.com/pyblog/friday-qa-2011-10-14-whats-new-in-gcd.html – johnbakers
Tôi đã chỉnh sửa câu trả lời của mình - Tôi đã sử dụng kỹ thuật Mike Ash trong iOS 4.3 của mình ứng dụng để tôi biết chắc chắn các rào cản nơi có hàng đợi đồng thời. –
điều này là thú vị, trong một câu hỏi khác của tôi và trên trang web của Ash là tốt, nó đã được thống nhất bởi tất cả các hàng đợi đồng thời tùy chỉnh chỉ có sẵn trong iOS 5 trở lên; bạn đang đề xuất khác. hàng đợi đồng thời toàn cầu luôn sẵn có, nhưng mọi người đều có ấn tượng rằng hàng đợi đồng thời tùy chỉnh là một bổ sung rất gần đây cho iOS (mặc dù đã có trong OS X trước đó) – johnbakers