Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ распрСдСлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 137

Автор Π₯ьюз ΠšΠ°ΠΌΠ΅Ρ€ΠΎΠ½

ΠžΡΠΎΠ±Ρ‹ΠΉ интСрСс для нашСй «классной доски» ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ pvm_barrier() ΠΈ pvm_joingroup(), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ситуации, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… «классная доска» Π½Π΅ запускаСт Π½ΠΎΠ²Ρ‹Π΅ источники Π·Π½Π°Π½ΠΈΠΉ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° опрСдСлСнная Π³Ρ€ΡƒΠΏΠΏΠ° источников Π·Π½Π°Π½ΠΈΠΉ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Для блокирования Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ процСсса Π΄ΠΎ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° (Π΄ΠΎ окончания ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ источниками Π·Π½Π°Π½ΠΈΠΉ) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ pvm_barrier (). НапримСр, «классная доска» Π² качСствС ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚Π° ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ курсов обучСния Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ источник Π·Π½Π°Π½ΠΈΠΉ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° составлСниС расписания, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ прСдставят свои прСдлоТСния источники Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° основных, ΠΎΠ±Ρ‰Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…, второстСпСнных ΠΈ Ρ„Π°ΠΊΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… курсах. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ «классная доска» Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ pvm_barrier () для оТидания Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ этой Π³Ρ€ΡƒΠΏΠΏΡ‹ PVM-Π·Π°Π΄Π°Ρ‡. На рис. 13.5 прСдставлСна UML-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π²ΠΈΠ΄ΠΎΠ² Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, которая позволяСт ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ источники Π·Π½Π°Π½ΠΈΠΉ ΠΈ «классная доска».

Π‘Π°Ρ€ΡŒΠ΅Ρ€ синхронизации здСсь рСализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ pvm_barrier () ΠΈ pvm_joingroup (). РСализация ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΈΠ²Π΅ Π΄ Π΅Π½Π° Π² Π» истин Π³ Π΅ 13.5.

Π’Π°Π±Π»ΠΈΡ†Π° 13.2. Π“Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Π΅ PVM-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

int pvm_joingroup (char *groupname);Вносит Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ процСсс Π² Π³Ρ€ΡƒΠΏΠΏΡƒ groupname, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ int-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставляСт собой Π½ΠΎΠΌΠ΅Ρ€ процСсса Π² этой Π³Ρ€ΡƒΠΏΠΏΠ΅

int pvm_lvgroup (char *groupname); УдаляСт Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ процСсс ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ groupname

int pvm_gsive (char *groupname); Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ int-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставляСт собой количСство Ρ‡Π»Π΅Π½ΠΎΠ² Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ groupname

int pvm_gettid (char *groupname, int inum); Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ int-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π²Π½ΠΎΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ Π·Π°Π΄Π°Ρ‡ΠΈ, выполняСмой процСссом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ идСнтифицируСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹ groupname ΠΈ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ экзСмпляра inum

int pvm_getinst (char *groupname, int taskid); Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ int-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставляСт собой Π½ΠΎΠΌΠ΅Ρ€ экзСмпляра, связанный с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹ groupname ΠΈ процСссом, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌ Π·Π°Π΄Π°Ρ‡Ρƒ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ taskid

int pvm_barrier (char *groupname, int count); Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ процСсс Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° count Ρ‡Π»Π΅Π½ΠΎΠ² Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ groupname Π½Π΅ Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

int pvm_bcast (char *groupname, int messageid); ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ всСм Ρ‡Π»Π΅Π½Π°ΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹ groupname сообщСниС, Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠ΅ Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ, связанном с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ messageid

int pvm_reduce (void *operation, void *buffer, int count, int datatype, int messageid, char *groupname, int root); ВыполняСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ operation Π²ΠΎ всСх процСссах Π³Ρ€ΡƒΠΏΠΏΡ‹ groupname

Рис.13.5. UML-Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π²ΠΈΠ΄ΠΎΠ² Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ «классной доски» ΠΈ источников Π·Π½Π°Π½ΠΈΠΉ

// Листинг 13.5. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ operator() //Β Π² классС task

void task::operator()(string X) {

int cc; pvm_mytid();

cc = pvm_spawn(const_cast<char *>(X.data()),NULL,0,"",l, &Tid[N]);

N++;

}

Ѐункция-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ operator () ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пороТдСния PVM-Π·Π°Π΄Π°Ρ‡. Имя Π·Π°Π΄Π°Ρ‡ΠΈ содСрТится Π² элСмСнтС X. data (). ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pvm_spawn () (см. листинг 13.5) создаСтся ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡Π°, Π° Π΅Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ сохраняСтся Π² элСмСнтС Tid[N] . (ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pvm_spawn () ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ PVM-Π·Π°Π΄Π°Ρ‡ см. Π³Π»Π°-Π²ΡƒΠ±.) Класс task ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ). ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

for_each(Solve.begin(),Solve.end(),Task);

вызываСтся функция operator (), которая выполняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Task. Π­Ρ‚Π° опСрация заставляСт Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ источники Π·Π½Π°Π½ΠΈΠΉ, содСрТа Ρ‰ иСся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Solve. Алгоритм for_each () Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΡŽ всСх источников Π·Π½Π°Π½ΠΈΠΉ. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌ одСль SIMD, Ρ‚ΠΎ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ for_each () Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ нСобходимости. ВмСсто Π½Π΅Π³ΠΎ прямо Π² конструкторС «классной доски» ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pvm_spawn(). Π’ листингС 13.6 ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ использовании ΠΌΠΎΠ΄Π΅Π»ΠΈ SIMD ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ мноТСство PVM-Π·Π°Π΄Π°Ρ‡ ΠΈΠ· конструктора «классной доски».

// Листинг 13.6. Запуск PVM-Π·Π°Π΄Π°Ρ‡ ΠΈΠ· конструктора

// класса task

void task::operator()(string X) {

int cc; pvm_mytid();

cc = pvm_spawn(const_cast<char *>(X.data()),NULL,0,"",l, &Tid[N]);N++;

}

Бвязь «классной доски» ΠΈ источников Π·Π½Π°Π½ΠΈΠΉ

Богласно ΠΊΠΎΠ΄Ρƒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Π² листингС 13.6, пороТдаСтся 20 источников Π·Π½Π°Π½ΠΈΠΉ. Π‘Π½Π°Ρ‡Π°Π»Π° всС ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄. ПослС ΠΈΡ… пороТдСния «классная доска» Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСния с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² процСссС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠŸΡ€ΠΈ использовании Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ источники Π·Π½Π°Π½ΠΈΠΉ ΠΈ «классная доска» ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ PVM-срСды. ПослС создания источники Π·Π½Π°Π½ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с «классной доской» ΠΏΡƒΡ‚Π΅ΠΌ соСдинСния с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° размСщаСтся, ΠΈΠ»ΠΈ ΠΏΠΎ Π΅Π΅ адрСсу Π² сСти intranet ΠΈΠ»ΠΈ Internet. Для этого источникам Π·Π½Π°Π½ΠΈΠΉ понадобится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ ссылка Π½Π° Β«ΠΊΠ»Π°ΡΡΠ½ΡƒΡŽ доску». Π­Ρ‚ΠΈ ссылки ΠΌΠΎΠΆΠ½ΠΎ Β«Π·Π°ΡˆΠΈΡ‚ΡŒΒ» Π² ΠΊΠΎΠ΄ источников Π·Π½Π°Π½ΠΈΠΉ, ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· слуТбы ΠΈΠΌΠ΅Π½. ИмСя ссылку, источник Π·Π½Π°Π½ΠΈΠΉ взаимодСйствуСт с ORB-Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ (Object Request Broker β€” Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… запросов), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (знания) ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ «классной доскС» ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ ΠΈ запускаСм CORBA-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «классной доски» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎ ΠΌ Π°Π½Π΄Ρ‹,

blackboard -ORBIIOPAddr inet:porthos:12458

По этой ΠΊΠΎΠΌΠ°Π½Π΄Π΅ запускаСтся наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «классной доски» с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΏΠΎΡ€Ρ‚Ρƒ 12458 хоста porthos. Запуск CORBA-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° зависит ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ CORBA-Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Β«ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽΒ» CORBA-Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Mico [25] ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ blackboard рСализуСтся экзСмпляр «классной доски», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ источники Π·Π½Π°Π½ΠΈΠΉ. Π’ созданных источниках Π·Π½Π°Π½ΠΈΠΉ ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ с «классной доской». Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ источника Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связываСтся с CORBA - ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ «классной доски», прСдставлСн Π² листингС 13.7.

// Листинг 13.7. Код источника Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связываСтся

// с CORBA-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ «классной доской»

1Β #include Β«pvm3.hΒ»

2Β using namespace std;

3Β #include <iostream>

4Β #include <fstream>

5Β #include <string.h>

6Β #include <strstream>

7Β #include Β«black_board_impl.hΒ» 8

9Β int main(int argc, char *argv[])

10Β {

11Β CORBA::ORB_var Orb = CORBA::ORB_init(argc, argv,Β«mico-local-orbΒ»);

12Β CORBA::Object_yar Obj =Orb->bind(Β«IDL:black_board:1.0Β»,Β«inet:por thos:12 4 5 8Β»);

13Β courses Courses;

14Β //...

15Β //...

16Β black_board_var BlackBoard = black_board::_narrow(Obj);

17

18Β int Pid;

19Β //...

20Β //... 21

22Β cout Β« Β«Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π·Π½Π°Π½ΠΈΠΉ создан.Β» Β« endl;

23Β Courses.length(2);

24Β Courses[0] = 255551;

25Β Courses[l] = 253212;

26Β string FileName;

27Β strstream Buffer;

28Β Pid = pvm_mytid();

29Β Buffer Β« Β«Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Β» Β« Pid Β« ends;

30Β Buffer Β» FileName;

31Β ofstream Fout(FileName.data());

32Β BlackBoard->suggestionsForMajor(Courses);

33Β Fout.close();

34Β pvm_exit();

35Β return(0);

36Β } 37

Π’ строкС 11 (см. листинг13.7) инициализируСтся ORB Π±Ρ€ΠΎΠΊΠ΅Ρ€ . ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ строки 12 осу Ρ‰ СствляСтся связываниС ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° black_board с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ 12458 ΠΈ Π²ΠΎΠ·Π²Ρ€Π° Ρ‰ аСтся ссылка Π½Π° CORBA-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Obj. Π‘Ρ‚Ρ€ΠΎΠΊΡƒ 16 ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ привСдСния Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ BlackBoard ΡΡΡ‹Π»Π°Π»Π°ΡΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Β». ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ источник Π·Π½Π°Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ BlackBoard, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ любой ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Π² интСрфСйсС black_board, ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 13.1. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° созданиС Π² строкС 13 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Courses. ВспомнитС, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ courses ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ CORBA-Ρ‚ΠΈΠΏ sequence. Π—Π΄Π΅ΡΡŒ источник Π·Π½Π°Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ класс courses, созданный Π²ΠΎ врСмя IDL-компиляции. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² этот класс ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² любой массив. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ строк 24 ΠΈ 25 Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Courses Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π° элСмСнта, Π° Π² строкС 32 содСрТится Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° пСрСдаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Courses: BlackBoard->suggestionsForMaj or(Courses)