@synchronized vs диспетчеризация GCD _барьер _async

Я впервые начал управлять очередями и чувствую, что хорошо разбираюсь в том, как их использовать, и спасибо Apple за то, что они сделали их довольно простыми в использовании.

Однако я столкнулся с проблемой чтения и записи нескольких потоков в одни и те же объекты. В этот вопрос я получил этот прекрасный ответ , и мне остается попросить подтверждения у всех, чтобы убедиться, что я понимаю плюсы и минусы @synchronizedпротив GCD dispatch_barrier_async.

Вот как я это вижу:

 @synchronized

ПРО:Вы можете обернуть любой объект в @synchronized, если у вас есть доступ/указатель на него, что упрощает безопасную обработку общих моделей данных из разных объектов в программе

. ПРО:Поддерживается iOS 4 (и, возможно, ранее)

 `dispatch_barrier_async` with custom DISPATCH_QUEUE_CONCURRENT

ПРО:Работает быстрее, чем @synchronized

КОН:DISPATCH _QUEUE _CONCURRENT доступно только в iOS 5 (, как обсуждалось здесь), поэтому недоступно для поддержки iOS 4

КОН:Не так просто использовать при управлении чтением/записью объекта из многих других объектов, поскольку очереди легче всего доступны только объекту, который их создает (без какой-либо работы, чтобы обойти это ограничение )

. Таким образом, лучший инструмент зависит от потребностей программы с учетом вышеизложенного.

Если у кого-то есть, что добавить или указать, буду признателен.

11
задан Community 23 May 2017 в 11:45
поделиться