История изменений
Исправление alysnix, (текущая версия) :
в состоянии терминирования программа уже «все сообщения» обработать не может в общем случае.
у системы три базовых состояния
- инициализации
- нормальной работы
- завершения.
в состоянии завершения система не может работать так же, как и в состоянии «нормальная работа».
пример:
тред А и В получают в очередь мессагу - останов, но не реагируют на нее, а продолжают выбирать предыдущие сообщения. тред A шлет мессагу треду В, но она оказывается после мессаги останов и не будет выбрана. тут возникает явное нарушение логики работы поскольку в нормальном режиме тред B должен был на нее среагировать. в общем случае это дает неопределенное состояние или поведение системы.
то есть, наилучшей стратегией будет мгновенное реагирование на сигнал останова и переход в состояние «завершения», явным образом разруливая всевозможные конфликты подсистем при завершении работы всей системы. потому что такие конфликты неизбежны.
Исходная версия alysnix, :
в состоянии терминирования программа уже «все сообщения» обработать не может в общем случае.
у системы три базовых состояния
- инициализации
- нормальной работы
- завершения.
в состоянии останова система не может работать так же, как и в состоянии «нормальная работа».
пример:
тред А и В получают в очередь мессагу - останов, но не реагируют на нее, а продолжают выбирать предыдущие сообщения. тред A шлет мессагу треду В, но она оказывается после мессаги останов и не будет выбрана. тут возникает явное нарушение логики работы поскольку в нормальном режиме тред B должен был на нее среагировать. в общем случае это дает неопределенное состояние или поведение системы.
то есть, наилучшей стратегией будет мгновенное реагирование на сигнал останова и переход в состояние «завершения», явным образом разруливая всевозможные конфликты подсистем при завершении работы всей системы. потому что такие конфликты неизбежны.