int main(int argc, char *argv[]) {

  int i;
  found = 0;
  no_more_pass = 0;

  strcpy(hash, argv[1]);

  filaPasswords = initFila(filaPasswords);

  // Inicialização do semáforo
  sem_init(&sem, 0, 1);

  // Criação das threads
  pthread_create(&produtor, NULL, producePasswords, NULL);
  for (i = 0; i < NUM_CONSUMIDORES; i++) {
    pthread_create(&consumidor[i], NULL, testPasswords, NULL);
  }

  // Aguarda a finalização das threads
  pthread_join(produtor, NULL);
  for (i = 0; i < NUM_CONSUMIDORES; i++) {
    pthread_join(consumidor[i], NULL);
  }

  if (!found) {
    printf("Senha não encontrada!\n");
  }

  freeFila(filaPasswords);
  return 0;
}
예제 #2
0
//Imprime caminho por meio de antecessores
int printCaminho(grafo G)
{

    //Caso Vertice de entrada ou Vertice de saída não estejam dentro da distância maxima permitida do corpo de bombeiros
    if(G->cor[G->root] != Vermelho || G->cor[G->end] != Vermelho)
    {
        printf("-1\n");
        return -1;
    }

//Como é feito por meio de antecessores colocamos tudo em um queue
    fila F = initFila();
    float probs = 1;

    //Guarda caminho em um queue
    int vertice = G->end;
    do
    {
        Queue(F,vertice);
        probs = probs * G->probs[vertice];
        vertice = G->anterior[vertice];

    }
    while(vertice != -1);

    //Impressão dos Resultados
    printf("%.2f",1.0-probs);
    while(!isEmpty(F))
    {
        printf(" %d",deQueue(F));
    }
    printf("\n");

    liberaFila(F);

    return 1;
}