Что произойдет, если dispatch_main будет вызван из-за пределов основного потока?

Функция dispatch_main используется для того, чтобы основной поток начал обработку блоков, отправленных в основную очередь. Итак, dispatch_main — это своего рода цикл выполнения, который не возвращается и, после обработки уже поставленных в очередь блоков, ждет отправки других блоков в основную очередь.

Итак, что произойдет, если dispatch_main будет вызван из-за пределов основного потока? Если основной поток обрабатывает другую функцию, прерывается ли он, чтобы позволить основному потоку обработать блоки в очереди? Можно ли вызывать dispatch_main из-за пределов основного потока?


person LuisABOL    schedule 14.05.2013    source источник


Ответы (1)


dispatch_main() утверждается при вызове из-за пределов основного потока и прерывает ваш процесс, он должен вызываться только из основного потока.

dispatch_main() на самом деле не что иное, как замаскированное pthread_exit() (см. реализация): он превращает основную очередь в обычную очередь последовательной отправки, а затем завершает основной поток.

С этого момента основная очередь будет обслуживаться потоком рабочей очереди по требованию, как и любая другая очередь отправки.

person das    schedule 14.05.2013
comment
Вот стабильная ссылка на реализацию dispatch_main() в конкретном коммите. Тот, что в ответе, меняется по мере добавления коммитов. github.com/apple/swift-corelibs- libdispatch/blob/409a3b88/src/ - person Sterling Archer; 09.12.2020