Параллельное и распределенное программирование на С++ (Хьюз, Хьюз) - страница 361

В общем случае эта проблема решается проще в рамках одного процесса и одного компьютера, чем при использовании нескольких процессов и нескольких компьютеров. На рис. 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,

>// используемый для создания потоков,

>// содержащих источники знаний