next up previous
Next: . Up: M�quina Paralela Virtual (PVM) Previous: Ambiente


Exemplo

O exemplo que apresentamos a seguir ilustra os conceitos b�sicos da programa��o em PVM.

O programa ol�, evocado manualmente, depois de imprimir o seu TID, obtido pela evoca��o da fun��o pvm_mytid(), lan�a uma c�pia de um outro programa ol�_meu recorrendo � fun��o pvm_spawn(). O programa evoca uma nova fun��o pvm_rec() e entra em modo de recep��o bloqueante. A chegada da mensagem liberta-o do estado de espera, seguindo-se a obten��o do conte�do da mensagem e da identifica��o do respectivo remetente, fun��o pvm_upstr(). Finalmente desassocia-se da m�quina virtual pvm_exit() depois de imprimir uma mensagem no �cran.

O programa ol�_meu come�a por obter a identifica��o do programa que o lan�ou, pvm_parent() assim como o nome do computador hospedeiro. A informa��o obtida no passo anterior � seguidamente transmitida, usando uma sequ�ncia de tr�s fun��es:

  1. pvm_initsend() - para iniciar um tamp�o de mem�ria para comunica��o;
  2. pvm_pkstr() - para colocar uma mensagem no tamp�o;
  3. pvm_send() - para enviar, finalmente, a mensagem. Um dos par�metros da fun��o de emiss�o � uma etiqueta de identifica��o da mensagem.

Programa Ol�

/* m�dulo Ol� */

#include <stdio.h>
#include "pvm3.h"

main()
{	int cc, tid;
	char buf[100];

	printf("i'm t%x\n", pvm_mytid());

	cc = pvm_spawn("Ol�_meu", (char**)0, 0, "", 1, &tid);
	if (cc == 1) {
		cc = pvm_recv(-1, -1);
		pvm_bufinfo(cc, (int*)0, (int*)0, &tid);
		pvm_upkstr(buf);
		printf("de tarefa%x: %s\n", tid, buf);
	} else
		printf("N�o � poss�vel iniciar Ol�\_meu\n");
	pvm_exit();
	exit(0);}

Programa Ol�_Meu

/* m�dulo Ol�_Meu */


#include "pvm3.h"

main()
{	int ptid;
	char buf[100];

	ptid = pvm_parent();

	strcpy(buf, "Ol� , daqui o teu");
	gethostname(buf + strlen(buf), 64);

	pvm_initsend(PvmDataDefault);
	pvm_pkstr(buf);
	pvm_send(ptid, 1);

	pvm_exit();
	exit(0);
}









Ant�nio Pina
Junho 1999


next up previous
Next: . Up: M�quina Paralela Virtual (PVM) Previous: Ambiente

1999-06-26