UFMG - Pós-graduação em Ciência da Computação - Programação Paralela

A seguir: Monitores Acima: Sincronização com Memória Compartilhada Anterior: Jantar dos Filósofos com


Jantar dos Filósofos com Semáforos - 2

void take_forks (int i) {
  down(mutex);  /* exclusao mutua nas variaveis de controle */
    state[i] = HUNGRY;
    test(i);
  up(mutex);
  down(s[i]);   /* exclusao mutua com vizinhos */
}

void test(int i) {
  if (state[i] == HUNGRY && 
      state[LEFT] != EATING && state[RIGHT] != EATING) {
    state[i] = EATING;
    up(s[i]);
  };
  /* 
}

void put_forks(int i) {
  down(mutex);  /* exclusao mutua nas variaveis de controle */
    state[i] = THINKING;
    test(LEFT); // notifica
    test(RIGHT);// os vizinhos
  up(mutex);
}



Osvaldo Carvalho