set<long> SuggestionForElective;
courses Schedule; courses DegreePlan;
public:
blackboard(void); ~blackboard(void);
void suggestionsForMajor(const courses &X);
void suggestionsForMinor(const courses &X);
void suggestionsForGeneral(const courses &X);
void suggestionsForElectives(const courses &X);
courses *currentDegreePlan(void);
courses *suggestedSchedule(void);
//. . .
} ;
ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅. ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ black_board, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.2, Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ black_board, Π° ΠΊΠ»Π°ΡΡ POA_black_board, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ IDL-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° black_board. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° POA_black_board ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.3.
// ΠΠΈΡΡΠΈΠ½Π³ 13.3. Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° POA_black_board,
//Β ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ idl-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Π΄Π»Ρ
//Β ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° black_board
class POA_black_board : virtual public PortableServer::StaticImplementation
{
public:
virtual -POA_black_board (); black_board_ptr _this ();
bool dispatch (CORBA::StaticServerRequest_ptr); virtual void invoke (CORBA::StaticServerRequest_ptr); virtual CORBA::Boolean _is_a (const char *); virtual CORBA::InterfaceDef_ptr _get_interface (); virtual CORBA::RepositoryId _primary_interface
(const PortableServer::ObjectId &, PortableServer::POA_ptr);
virtual void * _narrow_helper (const char *); static POA_black_board * _narrow (
PortableServer::Servant); virtual CORBA::Object_ptr _make_stub (PortableServer::
POA_ptr,
CORBA::Object_ptr);
//.. .
virtual void suggestionsForMajor (const courses& Major)
= 0;
virtual void suggestionsForMinor (const courses& Minor)
= 0;
virtual void suggestionsForGeneral (
const courses& General) = 0;
virtual void suggestionsForElectives (
const courses& Electives) = 0;
virtual courses* currentDegreePlan() = 0;
virtual courses* suggestedSchedule() = 0;
//. . . protected:
POA_black_board () {}; private:
POA_black_board (const POA_black_board &); void operator= (const POA_black_board &);
};
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.3 ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Ρ ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ, Π½Π°ΠΏΡΠΈ ΠΌ Π΅Ρ:
virtual courses* suggestedSchedule() = 0;
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΠΏΡΡ ΠΌ ΡΡ. ΠΠ· Π½Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈ ΠΌ ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ»Π°ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎ ΠΌ Π±ΡΠ΄ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ»Π°ΡΡ POA_black_board, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.2, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ΅Π±ΡΠ΅ ΠΌ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ². Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈ*', ΡΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΡΠ° ΠΌ ΠΎΠΉ Β«Π΄ΠΎΡΠΊΠΈΒ» ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π‘ ++-ΠΌ Π΅ΡΠΎΠ΄Ρ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π² ΡΠ·ΡΠΊΠ΅ Π‘++ ΠΈ ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π² ΡΠ·ΡΠΊΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎ Π³ ΡΠ° ΠΌΠΌ ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Prolog. [24] ΠΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π‘++ ΠΏΠΎΠ΄ Π΄ Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΡΠ»ΡΡΠΈΡΠ·ΡΠΊΠΎΠ²ΡΡ ΠΈ ΠΌΡΠ»ΡΡΠΈΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ, ΠΊ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌ Π‘++ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π° ΡΠ·ΡΠΊΠ° Prolog. Π Π‘++ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΠΎΠ΄ΠΈΡΡ Prolog-Π·Π°Π΄Π°ΡΠΈ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ posix_spawn() - ΠΈΠ»ΠΈ fork-exec-ΡΡΠ½ΠΊΡΠΈΠΉ), Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠ΅Π΄Π΅ Prolog ΡΠ΅ΡΠ΅Π· Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Prolog-ΡΡΠ΅Π΄Π΅ ΠΎΠ±ΡΠ°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ Π‘++ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΡΠΎΠ·Π΄Π°Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ β Π‘++ ΠΈΠ»ΠΈ Prolog, ΠΎΠ±ΡΠ΅ΠΊΡ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π‘++-ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ.
ΠΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ»
Β«ΠΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ CORBA-ΠΏΡΠΎΡΠΎΠΊΠΎΠ». Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ΅Π»Π΅ΠΉ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ. ΠΡΠΎ Π²Π°ΠΆΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌ Π·Π°Π΄Π°Ρ. ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» (ΠΎΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅) Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΡΠ΄Π΅Π½ΡΠ΅, Π΅Π³ΠΎ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ΅, ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠ΅ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ° ΠΈ Ρ.Π΄. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ», ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π² ΡΠ°Π±ΠΎΡΡ. ΠΠ½Π°ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΠΎΡΠ΅Π½ΠΈΠ² Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ, Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π·Π½Π°Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», Π° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Solvers. ΠΠΎΠ·ΠΆΠ΅, ΠΏΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Ρ ΠΏΠΎ ΠΌ ΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΡΡΠ½ΠΊΡΠΈΠΈ) ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° for_each() ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ. ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΠΊΠ»Π°ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ operator(), ΠΌ ΠΎΠΆ Π½ ΠΎ ΠΈΡΠΏΠΎ Π» ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ±ΡΠ΅ΠΊΡΡ-ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈ Π» ΠΎ ΠΏΡΠΈ ΠΌ Π΅Π½ΡΡΡ ΡΠΎΠ² ΠΌ Π΅ΡΡΠ½ΠΎ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Ρ ΠΌ ΠΈ Π°Π»Π³ΠΎΡΠΈΡ ΠΌ Π° ΠΌ ΠΈ Π² ΠΌ Π΅ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π» ΠΈ Π² Π΄ΠΎΠΏΠΎ Π» Π½Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈ ΠΌ. ΠΠ±ΡΡΠ½ΠΎ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΌ ΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΅Π΅ ΠΌ ΠΎΠΆΠ½ΠΎ Π·Π° ΠΌ Π΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎ ΠΌ -ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ. Π§ΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈ ΠΌ ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΡΠΉ ΠΌ Π΅ΡΠΎΠ΄ operator (), ΠΏΡΠΈΠ΄Π°Π² Π΅ ΠΌ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Ρ ΠΌ ΡΡΠ», ΡΠΊΠ°Π·Π°Π² ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ° ΠΌ Π΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ ΠΌ ΠΎΠ³ΠΎ ΠΈ ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΡΠ° CORBA-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» ΠΌ ΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ Π΄ Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎ ΠΌ ΠΎΡΡΡ PVM-Π·Π°Π΄Π°Ρ, ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ UNDC/Linux-Π·Π°Π΄Π°Ρ ΠΈΠ»ΠΈ ΠΎΡ Π΄ Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ POSIX thread. ΠΠΎ ΡΠΈΠΏΡ Π·Π°Π΄Π°Ρ, ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ ΠΌ ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅, ΠΌ ΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Ρ ΠΊΠ°ΠΊΠΈ ΠΌ ΠΈ ΠΈ ΠΌ Π΅Π½Π½ΠΎ Π·Π°Π΄Π°ΡΠ° ΠΌ ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β»: Ρ POSIX-ΠΏΠΎΡΠΎΠΊΠ° ΠΌ ΠΈ, ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½Ρ ΠΌ ΠΈ UNIX/Linux-ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΌ ΠΈ ΠΈΠ»ΠΈ PVM-Π·Π°Π΄Π°ΡΠ° ΠΌ ΠΈ.
ΠΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ PVM-Π·Π°Π΄Π°Ρ
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, for_each(Solve.begin(),Solve.end(), Task);
ΠΠ»Π³ΠΎΡΠΈΡΠΌ for_each () ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° Π·Π°Π΄Π°ΡΠΈ) ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Solve. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ MIMD, ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π·Π°Π΄Π°Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.4.
// ΠΠΈΡΡΠΈΠ½Π³ 13.4. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Π·Π°Π΄Π°ΡΠΈ
class task{
int Tid[4];
int N;
//. . .
public:
//. . .
task(void) { N = 0; } void operator()(string X);
};
void task::operator()(string X) {
int cc; pvm_mytid();
cc = pvm_spawn(const_cast<char *>(X.data()),NULL,0,"",l,&Tid[N]);
N++;
}
blackboard::blackboard(void) {
task Task;
vector<string> Solve;
//.. .
// Determine which KS to invoke
//. . .
Solve.push_back(KS1);
Solve.push_back(KS2);
Solve.push_back(KS3);
Solve.push_back(KS4);
for_each(Solve.begin(), Solve.end(), Task);
}
ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ task ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ Π½ΠΎ ΠΌ Π΅Ρ Π·Π°Π΄Π°ΡΠΈ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ PVM-Π·Π°Π΄Π°ΡΠ°). Π ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈ ΠΌ Π΅Π½Π΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ UNDC/Linux-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈΠ»ΠΈ Pthread-ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ Π½ΠΎ ΠΌ Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΈ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΎΠΉΒ». Β«ΠΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» Π·Π΄Π΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ PVM-Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΡ Π½ΠΎΠΌΠ΅ΡΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΡΡΠΏΠΏΠΎΠ²ΡΠ΅ PVM-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ PVM-Π·Π°Π΄Π°Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π°ΡΡΠ΅ΡΠΎΠ², ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ PVM-Π·Π°Π΄Π°Ρ Π² Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π³ΡΡΠΏΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΡΠ΅ΡΠ°Π΅ΠΌΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»Π΅Π½ΠΎΠ² Π³ΡΡΠΏΠΏΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ΅Π³ΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΡΡΠΏΠΏΠΎΠ²ΡΠ΅ PVM-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΡΠ°Π±Π». 13.2.