#include "pvm3.h" main() { int mytid; /* identifikator procesu delnik */ int chief_tid; /* identifikator procesu sef */ int x_num; /* zkoumane cislo */ int cnt_work = 0;/* kolik prvocisel hledal */ int k; /* pomocna promenna */ mytid = pvm_mytid(); /* prihlaseni do PVM */ /* cekani na zpravu od sefa */ pvm_recv(-1, 4); /* 4 je kod zpravy */ pvm_upkint(&chief_tid, 1, 1); /* zjisti cislo sefa */ /* kontrola zda je sef ten pravy - totozny s otcem */ if (chief_tid == pvm_parent()) { /* odpoved sefovi */ pvm_initsend(PvmDataDefault);/* inic. bufferu */ pvm_pkint(&mytid, 1, 1); /* ulozeni identifikace */ pvm_pkint(&cnt_work, 1, 1); /* ulozeni citace */ pvm_send(chief_tid, 5); /* kod odpovedi 5 */ } /* delnik pracuje */ while (1) { /* !! zadne odbory */ pvm_recv (chief_tid, 6); /* cteni prikazu */ pvm_upkint (&x_num, 1, 1); /* ulozeni hodnoty zkoumaneho cisla */ if (x_num < 0) { pvm_initsend(PvmDataDefault);/* inic. bufferu */ pvm_pkint(&mytid, 1, 1); /* ulozeni identifikace */ pvm_pkint(&x_num, 1, 1); /* ulozeni ukoncovaciho zpravy */ pvm_pkint(&cnt_work, 1, 1); /* ulozeni citace prace */ pvm_send(chief_tid, 7); break; /* zaporna hodnota znamena konec prace */ } /* vlastni vypocet - pokud x_num je prvocislo, vrati se */ /* nezmenene, v opac. pripade se vrati zaporna hodnota */ for (k=3; k < x_num; k+=2) { cnt_work++; if (!(x_num % k)) { /* test zbytku po deleni */ x_num = -x_num; /* neni to prvocislo */ break; } } /* odeslani vysledku zkoumani */ pvm_initsend(PvmDataDefault);/* inic. bufferu */ pvm_pkint(&mytid, 1, 1); /* ulozeni identifikace */ pvm_pkint(&x_num, 1, 1); /* ulozeni vysledku */ pvm_pkint(&cnt_work, 1, 1); /* ulozeni citace prace */ pvm_send(chief_tid, 7); /* kod odpovedi 7 */ } /* ukonceni cinnosti */ pvm_exit(); }