185 похожих чатов

Почему не выведется Work 2?: let serialQueue = DispatchQueue(label: "com.foo.bar") serialQueue.async

{
print("Work 1")

serialQueue.sync {
print("Work 2")
}
}

Я предполагаю: Deadlock или Livelock - если верно, то какой из вариантов? Я думаю Livelock - тк приложение не падает с ошибкой.

2 ответов

11 просмотров

Здесь дедлок. У тебя создана последовательная (serial) очередь, значит подающиеся в нее задачи должны выполняться друг за другом. Шаг №1. Ты помещаешь в эту очередь блок кода, в который включен принт и работа с очередью. Отрабатывает принт 1 Шаг №2. В ту же самую очередь ты помещаешь блок кода с условием выполнить его синхронно, то есть дождаться его завершения. И получается что в последовательной очереди есть блок кода №1 который надо выполнить, но его не выполнить до конца, потому что он хочет чтобы выполнился сначала его вложенный блок №2. Но №2 в очередь можно поставить только следующим после №1. Поэтому после "принта 1" приложуха приляжет с вот таким EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0), который косвенно является признаком обнаружения дедлока. Разруливать это можно либо сделав очередь .concurrency, либо делать две разных очереди. Надеюсь ничего не напутал и не запутался сам )

Александр-Сергеев Автор вопроса
Денис Рубцов
Здесь дедлок. У тебя создана последовательная (ser...

А если не падает, а просто не выводит Work 2? Может Livelock?

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
61
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Как добавить ссылку в Быстрый доступ в Проводнике windows 10? Нашёл, как на power shell сделать, но может есть способ через Дельфи?
А
31
Привет всем. Не знаю, удачный ли чатик я выбрал для вопроса, но он как будто в целом про концепцию фп и конкретно про Haskell. Прочитал, что в целом в мире фп нет идеи мутабел...
Gellert Cringewald
15
@helgispbru @Dreamer_0x01 @Pathologic93 @webber_12 Не уверен, что вам всем это жутко интересно, но в продолжение недавнего диалога отправлю свои наброски. Хочу понять, правил...
Андрей [aharito] Харитонов
13
Карта сайта