LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

в состоянии терминирования программа уже «все сообщения» обработать не может в общем случае.

у системы три базовых состояния

  • инициализации
  • нормальной работы
  • завершения.

в состоянии завершения система не может работать так же, как и в состоянии «нормальная работа».

пример:

тред А и В получают в очередь мессагу - останов, но не реагируют на нее, а продолжают выбирать предыдущие сообщения. тред A шлет мессагу треду В, но она оказывается после мессаги останов и не будет выбрана. тут возникает явное нарушение логики работы поскольку в нормальном режиме тред B должен был на нее среагировать. в общем случае это дает неопределенное состояние или поведение системы.

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

Исходная версия alysnix, :

в состоянии терминирования программа уже «все сообщения» обработать не может в общем случае.

у системы три базовых состояния

  • инициализации
  • нормальной работы
  • завершения.

в состоянии останова система не может работать так же, как и в состоянии «нормальная работа».

пример:

тред А и В получают в очередь мессагу - останов, но не реагируют на нее, а продолжают выбирать предыдущие сообщения. тред A шлет мессагу треду В, но она оказывается после мессаги останов и не будет выбрана. тут возникает явное нарушение логики работы поскольку в нормальном режиме тред B должен был на нее среагировать. в общем случае это дает неопределенное состояние или поведение системы.

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