Dlatego jeżeli proces ją wywoła a następnie opuści grupę zanim proces root wywoła pvm_reduce() to może to powodować występowanie błędu.
PRZYKŁAD:
#define reducemsg 12 #define nproc 10 char *nazwaGrupy; nazwaGrupy="moja_grupa"
//najpierw trzeba uzyskać rGid, czyli numer członka //grupy u którego „pojawi” się wynik, w większości //wypadków jest to rodzic grupy
//dla rodzica grupy uzyskujemy jego własny numer int parentId = pvm_parent(); // int rGid = pvm_getinst(nazwaGrupy, parentId); //
// dla procesu-dziecka uzyskujemy numer rodzica: int myId = pvm_mytid(); // int rGid = pvm_getinst(nazwaGrupy, myId); //
//jeżeli wywołujemy pvm_reduce zaraz po przystąpieniu do grupy, wypadałoby //zsynchronizować procesy, ponieważ wywołanie pmv_reduce, a następnie //przystąpienie do grupy członka, który też wywoła pwm_reduce, generuje dziwne //błędy. info = pvm_barrier(nazwaGrupy, nproc); //
pvm_reduce( PvmSum, &ilewkole, 1, PVM_LONG, reducemsg, nazwaGrupy, rGid); //
//jeżeli stosuje się pvm_reduce na końcu programu WYSOCE wskazane jest zsynchronizowane //wszystkich członków grupy, ponieważ pvm_reduce jest komunikacją nieblokującą //może się pojawić sytuacja, że któryś proces wywoła tę funkcję i opuści grupę