Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
1

dispatch_barrier_async & dispatch_barrier_sync

18.11.2013, 21:48. Просмотров 1308. Ответов 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?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2013, 21:48
Ответы с готовыми решениями:

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. ...

error '80020009' Îøèáêà. /lalala/profile.asp, line 28
При простейшем и сто раз работавшем скрипте, вылетает ошибка! след....

Помогите найти драйвера для pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2
pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2 Мультимедиа...

Мультимедиа контролер PCI\VEN_14F1&DEV_8800&SUBSYS_EA3D14F1&REV_05\4&25700A26&0&3020
Помогите пожалуйста найти драйвер на мультимедиа видеоконтролер ...

немогу найти драйвера на PCI\VEN_1039&DEV_7012&SUBSYS_810D1043&REV_A0\3&61AAA01&0&17
Мультимедиа аудиоконтроллер...

5
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
19.11.2013, 08:43 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.
1
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
21.11.2013, 14:20  [ТС] 3
Спасибо.
То есть выходит, что dispatch_barrier_async по аналогии с dispatch_async сразу возвращает управление?
0
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
22.11.2013, 06:29 4
именно
1
someMan
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 27
22.11.2013, 14:42  [ТС] 5
Спасибо!
Т.е. получается такая картина:

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

Я правильно понимаю эту GCD-кухню?
0
Dan_banan_
11 / 11 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
05.12.2013, 14:42 6
dispatch_sync - при вызове на главное очереди приложение повиснет
0
05.12.2013, 14:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2013, 14:42

Нужен драйвера, код PCI\VEN_1039&DEV_7012&SUBSYS_0C98105B&REV_A0\3&B1BFB68&0&17
всем привет !! уменя нет звука нужен драйвер код...

Драйвера на PCI\VEN_10B7&DEV_1700&SUBSYS_80EB1043&REV_12\4&2E98101C&0&28 F0
помогите плиз - вот ID:...

Кто встречался с таким, подскажите - (#206;áúåêò)
Если на asp-странице происходит ошибка, то сервер выдает сообщение вот примерно...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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