В какой поток входит блок в диспетчере_once? Может ли блок dispatch_once работать в фоновом потоке, если код запускается из основного потока? Как обеспечить, чтобы он выполнялся в основном потоке независимо от того, какой поток выполняет его?В какой поток входит блок в диспетчере_once?
4
A
ответ
5
Он работает в текущей/вызывающей нити. Если вы хотите, я полагаю, вы могли бы использовать dispatch_sync
, чтобы убедиться, что он работает на фоне потока, но я не уверен, что бы вы получили. В общем, он работает в текущем потоке. Если другой поток уже находится в блоке dispatch_once
, вызывающий поток будет блокироваться до тех пор, пока блок не завершит выполнение в другом потоке, а затем продолжит.
Смежные вопросы
- 1. Поток не входит в цикл
- 2. Поток не входит в $ .ajax
- 3. Какой идентификатор входит в RequestProductPurchaseAsync?
- 4. Асинхронный запрос не входит в блок завершения
- 5. Полный блок не входит в панель навигации?
- 6. Почему код не входит в каждый блок?
- 7. Почему AFNetworking всегда входит в блок Failure?
- 8. Не входит, если/else блок
- 9. Что входит в рабочий поток Eventlet + Gunicorn?
- 10. Поток программы не входит в обработчик событий
- 11. Блок текущий поток в PTHREAD
- 12. Что именно происходит, когда поток входит в синхронизированный блок/метод в Java
- 13. В какой пакет входит пользовательский вход?
- 14. В какой файл входит файл библиотеки jquery?
- 15. В какой каталог входит сборка Docker?
- 16. В какой каталог входит служба Windows?
- 17. В какой слой входит базовый класс UserControl?
- 18. Программа не входит в блок if-else в Ruby
- 19. Что входит в основной поток в приложении C# WPF?
- 20. Перенаправить поток Debug.WriteLine в текстовый блок
- 21. В API Skobbler, какой блок Annotation.setOffset() в
- 22. Android/Java: Необъяснимо входит в блок catch, но пропускает строку
- 23. Почему этот код всегда входит в блок catch?
- 24. Почему это не входит в блок else-if?
- 25. X264 Декодер полный кадр не входит в один блок NAL
- 26. Какой блок не покрыт?
- 27. В какой файл входит файл webservice в vtigerCRM?
- 28. Созданный поток и блок «using»
- 29. Начать поток, когда приложение iOS входит в состояние фона
- 30. Управляющий поток не входит в цикл, как это возможно?
Начиная с iOS 8/Yosemite, 'dispatch_once' также гарантирует, что поток, фактически выполняющий блок, будет работать с самым высоким QoS (~ приоритетом) среди всех остальных потоков, ожидающих в том же' dispatch_once' для блока заканчивать. – das
Спасибо. Как я могу гарантировать, что он работает в основном потоке? – Boon
Лучший способ гарантировать, что только когда-либо вызывать этот API из основного потока, и в этом случае вам больше не нужно 'dispatch_once'. Другого способа добиться этого не существует. Наиболее очевидная проблема выглядит так: ваш поток BG попадает в 'dispatch_once', затем основной поток также попадает в него; основной поток будет заблокирован, ожидая, когда поток BG выйдет из блока, но поток BG будет заблокирован, ожидая, что основной поток выполнит работу и вернется. Отсюда тупик. – ipmcc