В общем случае эта проблема решается проще в рамках одного процесса и одного компьютера, чем при использовании нескольких процессов и нескольких компьютеров. На рис. 13.8 показаны уровни сложности, связанные с обработкой ошибок и исключительных ситуаций при использовании различных конфигураций.
Рис. 13.8. Уровни сложности при обработке ошибок и исключений |
Если источники знаний реализованы в отдельных потоках одного и того же процесса, то обработка возможных ошибок или исключительных ситуаций в этом случае относится к уровню сложности 2. Эту степень сложности необходимо учитывать еще на этапах проектирования и разработки программы, особенно в случае, если она требует параллельного программирования. Простейшее архитектурное решение, использующее модель «классной доски», состоит в реализации «классной доски» в виде глобального объекта, а источников знаний — в виде потоков. Рассмотрим фрагмент объявления класса blackboard.
>// Листинг 13.10. Фрагмент объявления класса blackboard,
>// разработанного для многопоточной среды
>class blackboard{ protected: //.. .
>set SuggestionForMajor;
>set SuggestionForMinor;
>set SuggestionForGeneral;
>set SuggestionForElective;
>set Schedule;
>set DegreePlan;
>mutex Mutex[10];
>//.. .
>public:
>blackboard(void) ;
>~blackboard(void);
>void suggestionsForMajor(set &X);
>void suggestionsForMinor(set &X);
>void suggestionsForGeneral(set &X);
>void suggestionsForElectives(set &X);
>set currentDegreePlan(void);
>set suggestedSchedule(void);
>//.. .
>};
Класс blackboard предназначен для реализации в качестве глобального объекта, к которому смогут получать доступ все потоки в программе. Обратите внимание на то, что класс blackboard в листинге 13.10 включает массив мьютексов. Эти мьютексы используются для защиты критических разделов «классной доски». При реализации источников знаний практически нет необходимости беспокоиться о синхронизации доступа к критическим разделам, поскольку код синхронизации инкапсулирован в классе blackboard.
Активизация источников знаний с помощью потоков
В этом разделе рассматривается реализация источников знаний в отдельных потоках. Потоки создаются здесь при выполнении конструктора класса «классной доски» (blackboard), и каждому потоку назначается конкретный источник знаний. Тем самым реализуется модель MIMD. Фрагмент кода конструктора класса blackboard приведен в листинге 13.11.
>// Листинг 13.11. Конструктор класса blackboard,
>// используемый для создания потоков,
>// содержащих источники знаний