/gold/commons.hraquo; main ()
{_ t time; mytid; gold_tid;
int golds [NUM_SLAVES];// масив для зберігання даних ID завдань з golditems [SIZE];// Дані для обробки
int result, i, kp; results [NUM_SLAVES];=clock ();=pvm_mytid (); (i=0; i lt; SIZE; i ++)//робимо масив [i]= i;=pvm_spawn ( gold raquo ;, (char **) 0, PvmTaskDefault, raquo ;, 1, amp; gold_tid); (i=0; i lt; NUM_SLAVES; i ++)
{_ initsend (PvmDataDefault); _ pkint (items + i * DATA_SIZE, DATA_SIZE, 1); _ send (golds [i], MSG_DATA);
}
/* отримуємо результат від програм slave */
for (i=0; i lt; NUM_SLAVES; i ++)
{bufid, bytes, type, source;
int slave_no;
//отримуємо інформацію про повідомлення
pvm_bufinfo (bufid, amp; bytes, amp; type, amp; source);
//отримуємо номер slave, яка послала дане повідомлення
gold_no=get_gold_no (golds, source);
//розпаковуємо результат в правильну позицію
pvm_upkint (results + gold_no, 1, 1);
}
//знаходимо остаточний результат
kp=0;
for (i=0; i lt; NUM_SLAVES; i ++)
kp +=results [i];=clock () - time; ( Time =% f sec. raquo ;, (double) time/CLOCKS_PER_SEC);
//виходимо з PVM
pvm_exit ();
exit (EXIT_SUCCESS);
}//кінець main ()
Лістинг дочірньої програми gold.c:
# include lt; stdio.h gt;
# include commons.h main (void)
{p [SIZE/2]; kp; i, j, k; mytid, parent_tid;=pvm_mytid (); _ tid=pvm_parent (); _ recv (parent_tid, MSG_DATA); _ upkint (items, DATA_SIZE, 1);=0; [0]=1; ++; (i=3; i lt; SIZE; i +=2) {(j=1; j lt; kp; j ++) if (i% p [j] == 0) break; (j == kp) {p [kp]=i; kp ++;}
} (i=2; i lt;=SIZE; i +=2) {(j=0; j lt; kp; j ++) {(k=j; k lt; kp; k ++) {(p [j] + p [k] == i) {= kp ;;
}
} (k lt; kp) break; (j == kp) printf ( Винятки =% d n raquo ;, i); _ pkint (items, DATA_SIZE, 1); _ send (golds [ i], MSG_DATA); (); 0;