Cada nodo mantém localmente o vetor State[0..N-1], e atualiza as entradas correspondentes ao testar.
---------RELATÓRIO--------------
Na tarefa 3 foi adicionado um vetor local, seguindo a seguinte convenção: -1 se o estado do nodo i é desconhecido; 0 se o nodo i é sem-falha; 1 se o nodo i é falho. Para a parte visual do log o estado falho, 1 foi representado por um grande X e o estado desconhecido -1 representado por um * (asterisco). O vetor state foi criado de forma dinâmica e para isto necessário alocar espaço para os eu tamanho:
nodo[i].state = (int*) malloc (sizeof (int) *n);.
Para evitar leitura de algum lixo, foi criado um laço para completar o vetor com o estado desconhecido. Foi tomado o cuidado de não preencher sua própria posição no vetor pois um nodo conhece seu próprio estado:
for (j=0; j < n; j++) // laco para completar o vetor com estado indeterminado
if (i==j) nodo[i].state[j] = 0; // seu proprio estado
else nodo[i].state[j] = -1; // estado indeterminado
Condição para escrever no vetor local o status 0 (zero) que indicado nodo sem falha:
do {
prox = (prox+1)%n;
if (status (nodo[prox].id)==0)
nodo[token].state[prox] = 0; // recebendo status de sem falha
.
.
.
} while (status (nodo[prox].id) !=0);
Tarefa3 em txt: Tarefa3
LOG: Como podemos observar no log, o programa simulou corretamente e representou os vetores. log