我已經開始控制隊列的第一次,感覺像我有一個很好的處理如何使用它們和榮譽給蘋果,使他們非常直接地使用。@synchronized vs GCD dispatch_barrier_async
但是,我遇到的是多線程讀取和寫入相同對象的挑戰。在this question我得到了this fine answer,這讓我要求大家確認一下,以確保我瞭解@synchronized
vs GCD dispatch_barrier_async
的優缺點。
這是我看到它的方式:
@synchronized
PRO:您可以@synchronized
包裝任何對象,只要你有訪問/指針指向它,因此很容易共享數據模型是通過iOS 4的支持(可能更早)
`dispatch_barrier_async` with custom DISPATCH_QUEUE_CONCURRENT
:從不同對象的程序
PRO安全處理
PRO:比@synchronized
CON更快:DISPATCH_QUEUE_CONCURRENT僅可用在IOS 5(如所討論的here),因此沒有可用的支撐的iOS 4
CON:不容易當控制對來自許多其他對象的對象的讀/寫時使用,因爲隊列最容易僅用於創建它們的對象(沒有一些工作去繞過這個限制)
綜上所述,最好的工具取決於程序的需求,以上考慮。
如果有人有什麼要補充或指出,我會很感激。
你點2)並不適用於dispatch_barrier,因爲你不能用這個在全球的隊列中,只有一個自定義併發隊列。對於使用GCD機制的線程安全讀/寫,您需要一個自定義併發隊列。描述在這裏:http://www.mikeash.com/pyblog/friday-qa-2011-10-14-whats-new-in-gcd.html – johnbakers 2012-08-13 00:31:48
我編輯了我的答案 - 我在iOS 4.3中使用了Mike Ash技術應用程序,所以我肯定知道那裏的併發隊列的障礙。 – 2012-08-13 01:18:05
這很有趣,在我的另一個問題以及Ash的網站上,所有自定義併發隊列僅在iOS 5和更高版本中才可用;你是另有建議。全球併發隊列總是可用的,但每個人都有這樣的印象:自定義併發隊列是iOS的一個新增功能(儘管之前已經在OS X中) – johnbakers 2012-08-13 01:35:21