Esempio n. 1
0
void produtor(Shared *shm) {
  int i, j, n;

  /* Total de unidades produzidas */
  int produzidos = 0;

  for(i = 1; i <= LIMITE; i++) {
    /* Aguarda ate semaforo ficar verde */
    sem_wait(&shm->p_sem);
    
    /* produz entre 0 e 9 vezes por ciclo */
    n = randomNumber(0, 9);
    printf("[PID: %d] Produzir: %d vezes\n", getpid(), n);

    /* Produz N produtos por ciclo */
    for(j = 0; j < n; j++) {
      if(!pilhaCheia(&shm->pilha)) {
        printf("[PID: %d] Produzindo: %d - Lote: %d\n", getpid(), ++produzidos, i);
        empilha(&shm->pilha, produzidos);
      } else {
        printf("[PID: %d] Pilha encheu! O lote %d teve %d unidades\n", getpid(), i, j);
        break;
      }
    }

    /* Sinaliza que nao vai mais produzir caso tenha executado todos os ciclos */
    if(i == LIMITE) {
      shm->termina = 1;
      printf("[PID: %d] Não vai mais produzir\n", getpid());
    }

    /* Libera consumidores */
    sem_post(&shm->c_sem);
  }
}
Esempio n. 2
0
void empilha(pilha *p,int x){
    if(pilhaCheia(*p))
        printf("Pilha Cheia!");
    else{
        p->conteudo[p->topo] = x;
        p->topo++;
    }
}
Esempio n. 3
0
void push(PILHA *p, int v){   //OK
  if (pilhaCheia(p))   //OVERFLOW
    return;

  p->pilha[p->topo] = v;
  p->topo++;

}
Esempio n. 4
0
// retorna 1 se inseriu, 0 se nao inseriu
int inserePilha(Pilha *p, char elem){
    if (pilhaCheia(p))
        return 0;
 
    p->pilha[p->tam] = elem;
    p->tam++;
    return 1;
 
}
Esempio n. 5
0
void push( t_pilha* pilha, int valor) {

    if( pilhaCheia(pilha) ) {
        printf("Ocorreu overflow na pilha!\n");
        liberaPilha(pilha);
        exit(1);
    }

    pilha->item[++pilha->topo] = valor;

}