Всем привет! У меня такой вопрос: Может ли винда кильнуть процесс если он в дедлоке и мне ничего об этом не сказать? Точнее если дллка, которую он загрузил создала дедлок. p.s. Под "ничего об это не сказать" подразумевается то, что процесс просто подыхает а не "висит" ожидая когда дедлок "кончиться". Спасибо за советы, ответы!!
2Stas: Да, без моей помощи. Я тестю "мега" дллку, из-за которой вылетают вот такие перлы. Причем, всё это происходит на 2-х процессорной машине. На 1-процессорном всё нормально! При прочих равных условиях. Я в какой-то книжке по дебагу прочитал, что эффективно тестить МТ-шные приложения можно только на >=2 процессорной машине, но доказательств этого не увидел. Может с этим как-то связано? Спасибо!
Если виндос прибивает процесс - значит в каком-то из его потоков происходит exeption. deadlock - это для человека понятие, а не для компа. как система может определить, что зациклившийся код зациклился по ошибке ?! такой код вполне корректен: jmp $ это гораздо проще, чем deadlock, но виндос же не прибивает такой поток. > Значит проблемы с реализацией многопоточности - нереентерабельные ф-ции, нет синхронизации, да мало ли ещё чего...
На 2-х процессорной машине можно получить истинное распараллеливание потоков и соответственно напороться на специфичный deadlock : когда две нити ( thread) захватывают по одному ресурсу и ждут до опупения друг друга. На однопроцессорной машине вероятность такой ситуации гораздо меньше. Правда все конечно зависит от конкретной программы. Реентерабельность( повторная входимость) тоже важна : аккуратно проследи все места, куда можно войти "дважды" одновременно. Если есть статическая память - может быть все что угодно.
Дедлок - это следствие неправильного захвата ресурса(ов) (например перекрестный захват ресурсов)... Избежать его можно используя TryEnterCriticalSection - попробовать войти в критическую секцию, если используются именно они Ну а если семафоры или мьютексы... Тут уж valterg высказался...