Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
#1

dispatch_barrier_async & dispatch_barrier_sync - Программирование iOS

18.11.2013, 21:48. Просмотров 1116. Ответов 5
Метки нет (Все метки)

Привет всем обитателям форума!

Вогнал себя в небольшой ступор. Расскажите, пожалуйста, кто в теме:

Если мы пишем код вида:
Objective-C
1
2
3
4
5
6
7
dispatch_async(queue, exmpl_block1);
dispatch_async(queue, exmpl_block1);
 
dispatch_barrier_async(queue, another_block);
 
dispatch_async(queue, exmpl_block2);
dispatch_async(queue, exmpl_block2);

..то, another_block не выполнится до тех пор, пока не закончатся обе задачи exmpl_block1.
А exmpl_block2 не начнутся, пока не закончится another_block.
Правильно ли я понимаю?

Если да, то зачем тогда используется dispatch_barrier_sync? Если мы все равно ожидаем окончания выполнения блока в dispatch_barrier?

Добавлено через 4 минуты
Мелькнула страшная мысль (сейчас Мака под рукой нет, не могу попробовать) - неужели при dispatch_barrier_async мы ожидаем только конца выполнения предыдущих задач?
И мой exmpl_block2 тут же попадет в очередь после запуска another_block?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2013, 21:48     dispatch_barrier_async & dispatch_barrier_sync
Посмотрите здесь:

UISearchBar & UITableView - Программирование iOS
Доброго времени суток вопрос. Переделываю приложение под iOS 7 добавил поиск по таблице но он открывает файлы по индексу ячейки, а не по...

UITableViewCellStyleSubtitle & UITableViewCellStyleValue1 - Objective-C
http://pastie.org/5648179 При первой загрузке таблицы все работает. Когда прехеожу по ячейке первой и возвращаюсь, выбрасывает ...

UITableView & UIButton - Программирование iOS
Доброго времени суток. Возник вопрос у меня есть таблица с 3-мя ячейками мне нужно при выборе ячейки менять Title кнопки на тот текст...

-viewDidLoad & iOS4 - Objective-C
Добрый день! Есть две проблемы с вызовом -viewDidLoad. Во-​первых, при работе с собственным UIViewController классом, -viewDidLoad не...

CollectionView & Segue - Swift
Помогите плиз, голову уже сломал, весь нет перерыл - не могу понять что да как. Нужно передать по segue индекс выбранной ячейки ...

Android & Ios - Программирование iOS
привет всем ! како разниса кагда делаеш игру или апликасю длиа Android & Ios

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
19.11.2013, 08:43     dispatch_barrier_async & dispatch_barrier_sync #2
When the barrier block reaches the front of a private concurrent queue, it is not executed immediately. Instead, the queue waits until its currently executing blocks finish executing. At that point, the barrier block executes by itself. Any blocks submitted after the barrier block are not executed until the barrier block completes.

The queue you specify should be a concurrent queue that you create yourself using the dispatch_queue_create function. If the queue you pass to this function is a serial queue or one of the global concurrent queues, this function behaves like the dispatch_async function.
То есть, зависит от того, какая у вас очередь: если serial или одна из глобальных concurrent, то он ведет себя так же как dispatch_async. Если concurrent - то когда, очередь доходит до блока, он не выполняется сразу же, а ждет пока выполнятся все блоки, которые сейчас выполняются в очереди. Все, что диспатчится после него, ждет пока он не выполнится.

Добавлено через 5 минут
пардон, плохо прочитал вопрос, все же просто:
Unlike dispatch_barrier_async, this function does not return until the barrier block has finished. Calling this function and targeting the current queue results in deadlock.
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
21.11.2013, 14:20  [ТС]     dispatch_barrier_async & dispatch_barrier_sync #3
Спасибо.
То есть выходит, что dispatch_barrier_async по аналогии с dispatch_async сразу возвращает управление?
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
22.11.2013, 06:29     dispatch_barrier_async & dispatch_barrier_sync #4
именно
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
22.11.2013, 14:42  [ТС]     dispatch_barrier_async & dispatch_barrier_sync #5
Спасибо!
Т.е. получается такая картина:

dispatch_async - никого не ждет и сразу возвращает управление
dispatch_sync - никого не ждет, но не возвращает управление, пока не завершится
dispatch_barrier_async - ждет завершения предыдущих потоков в очереди, и сразу возвращает управление
dispatch_barrier_sync - ждет завершения предыдущих и не возвращает управление, пока не завершится

Я правильно понимаю эту GCD-кухню?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2013, 14:42     dispatch_barrier_async & dispatch_barrier_sync
Еще ссылки по теме:

GCC & iPhone SDK - Программирование iOS
Интересует возможность написания прикладных программ для iPhone не используя Mac OS. Покопавшись на зарубежных форумах, я нашёл несколько...

Lex&Yacc + iOS - Программирование iOS
Привет, у меня небольшой вопрос, не особо надеюсь что ктото поможеть, но все же https://github.com/MaxPatsy/iORC мой проект на...

MacBook Pro 2010 & Future - Программирование iOS
Всем привет! Подскажите, пожалуйста, кто в теме: У меня MacBook Pro 2010 года, который меня как бы полностью устраивает. Даже без...

Cocos2d & XCode Interface Builder - Программирование iOS
Как заставить Cocos2d запускаться в окне, которое я создал в Interface Builder in XCode? Вот нарисованное окошко: Нужно что-бы...

База данных для iOS & Android - Программирование iOS
Доброго времени суток! Заранее прошу прощения если тема уже была, честно приложив усилия к поиску ничего подходящего не нашла(( итак сама...

Общая библиотека для IPhone & IPad - Программирование iOS
Доброго времени суток, господа. Ситуация: Я студент, в основном специализируюсь на C++ и C#, про Objective-C и создание...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Dan_banan_
10 / 10 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
05.12.2013, 14:42     dispatch_barrier_async & dispatch_barrier_sync #6
dispatch_sync - при вызове на главное очереди приложение повиснет
Yandex
Объявления
05.12.2013, 14:42     dispatch_barrier_async & dispatch_barrier_sync
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru