Почему нельзя завершить процесс, если его потоки находятся в неизвестных состояниях? - PullRequest
1 голос
/ 10 августа 2010

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

Но по этой ссылке http://msdn.microsoft.com/en-us/library/ms686722(v=VS.85).aspx, он смотрит, когда процесс завершается, все связанные ресурсыосвобождаются, поэтому, если определенный рабочий поток выполняет тяжелую работу, ожидание может занять больше времени.Могу ли я игнорировать ожидание?

Также в приведенной выше ссылке я нахожу

Не завершать процесс, если его потоки не находятся в известных состояниях .Если поток ожидает объекта ядра, он не будет прерван до тех пор, пока не завершится ожидание.Это может привести к зависанию приложения.

Это слишком мало, чтобы понять, почему неправильное завершение потока в неизвестных состояниях при выходе из процесса.

Может кто-нибудь дать мне более подробную информацию опроблема?

Спасибо

1 Ответ

0 голосов
/ 07 октября 2011

Итак, когда поток ожидает объекта в ядре, он не завершит работу, пока не закончится ожидание.

Итак, допустим, у вас есть приложение с 3 потоками в следующих состояниях:

  1. Основной поток, в настоящее время бездействующий
  2. Поток обработки пользовательского интерфейса, в настоящее время бездействующий
  3. Поток, ожидающий объекта ядра

Если выпри завершении процесса поток 2 умрет, из-за чего умрут обработчики ввода пользовательского интерфейса и, следовательно, появится впечатление, что приложение не отвечает (зависает).До тех пор, пока поток № 3 не завершит ожидание в ядре, основной поток не завершится, и поэтому процесс продолжает работать, а ресурсы процесса не освобождаются.

Итак, я думаю, что в основном говорится, что этолучше попросить процесс выйти нормально, вместо того, чтобы посылать ему сигнал уничтожения, потому что вы можете попасть в ситуацию, подобную описанной, если какой-либо из потоков процесса ожидает объекты ядра.

...