//#exemplo tempo.c //Tarefa 3: Cada nodo mantém localmente o vetor State[0..N-1], e atualiza as entradas correspondentes ao testar. #include #include #include "smpl.h" /*eventos*/ #define test 1 #define fault 2 #define repair 3 /*descritor do nodo*/ typedef struct { int id; /*identidificador de facility*/ int* state; // identificador de status /*variaveis sao declaradas aqui*/ }tnodo; tnodo *nodo; main (int argc, char *argv[]){ static int n, token, event, r,i,j; static char fa_name[5]; if (argc !=2){ puts("use correto: tempo"); exit(1); } n = atoi (argv[1]); smpl(0,"um exemplo de simulação"); reset(); stream(i); /*inicialização*/ nodo= (tnodo*) malloc (sizeof (tnodo)*n); for (i=0; i < n; i++){ memset(fa_name, '\0', 5); sprintf(fa_name, "%d", i); nodo[i].id=facility(fa_name,1); nodo[i].state = (int*) malloc (sizeof (int) *n); //aloca espaco pro vetor dinamico for (j=0; j < n; j++) //laco para completar o vetor come stado indeterminado if (i==j) nodo[i].state[j] = 0; //seu estado else nodo[i].state[j] = -1; //estado indeterminado } /*escalonamento inicial dos eventos*/ for (i=0; i < n; i++) schedule(test, 30.0, i); schedule(fault, 50.0, 2); schedule(repair, 80.0, 2); /*dispara o tempo de simulacao*/ while (time() < 100.0) { cause (&event,&token); switch (event){ case test: if(status (nodo[token].id)!=0) break; int prox = token; // do { prox = (prox+1)%n; if (status (nodo[prox].id)==0) nodo[token].state[prox] = 0; else nodo[token].state[prox] = 1; //estado falho printf("o nodo %d vai testar o nodo %d no tempo %5.1f", token, prox, time()); //printf("o nodo %d vai testar o nodo %d no tempo %5.1f \n", token, prox, time()); /*IMPRIME O VETOR */ printf("\tvetor =["); for(i=0; i