Может ли винда кильнуть процесс если он в дедлоке?

Тема в разделе "WASM.WIN32", создана пользователем liss, 11 янв 2005.

  1. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    Всем привет!



    У меня такой вопрос:

    Может ли винда кильнуть процесс если он в дедлоке и мне ничего об этом не сказать?

    Точнее если дллка, которую он загрузил создала дедлок.



    p.s.

    Под "ничего об это не сказать" подразумевается то, что процесс просто подыхает а не "висит" ожидая когда дедлок "кончиться".



    Спасибо за советы, ответы!!
     
  2. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    Сорри, забыл сказать, что эту дллку юзают примерно 15 потоков в этом же процессе.
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Сама, без твоей помощи? IMHO только если exeption возникнет в его потоке.
     
  4. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    2Stas:

    Да, без моей помощи. Я тестю "мега" дллку, из-за которой вылетают вот такие перлы. Причем, всё это происходит на 2-х процессорной машине. На 1-процессорном всё нормально! При прочих равных условиях. Я в какой-то книжке по дебагу прочитал, что эффективно тестить МТ-шные приложения можно только на >=2 процессорной машине, но доказательств этого не увидел. Может с этим как-то связано?



    Спасибо!
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Если виндос прибивает процесс - значит в каком-то из его потоков происходит exeption.

    deadlock - это для человека понятие, а не для компа.

    как система может определить, что зациклившийся код зациклился по ошибке ?!

    такой код вполне корректен:



    jmp $



    это гораздо проще, чем deadlock, но виндос же не прибивает такой поток.



    >




    Значит проблемы с реализацией многопоточности - нереентерабельные ф-ции, нет синхронизации, да мало ли ещё чего...
     
  6. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105




    На 2-х процессорной машине можно получить

    истинное распараллеливание потоков и соответственно

    напороться на специфичный deadlock : когда две

    нити ( thread) захватывают по одному ресурсу

    и ждут до опупения друг друга. На однопроцессорной машине

    вероятность такой ситуации гораздо меньше. Правда

    все конечно зависит от конкретной программы.

    Реентерабельность( повторная входимость) тоже

    важна : аккуратно проследи все места, куда можно

    войти "дважды" одновременно. Если есть статическая

    память - может быть все что угодно.
     
  7. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Дедлок - это следствие неправильного захвата ресурса(ов) (например перекрестный захват ресурсов)... Избежать его можно используя TryEnterCriticalSection - попробовать войти в критическую секцию, если используются именно они :) Ну а если семафоры или мьютексы... Тут уж valterg высказался...