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); } }
void empilha(pilha *p,int x){ if(pilhaCheia(*p)) printf("Pilha Cheia!"); else{ p->conteudo[p->topo] = x; p->topo++; } }
void push(PILHA *p, int v){ //OK if (pilhaCheia(p)) //OVERFLOW return; p->pilha[p->topo] = v; p->topo++; }
// 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; }
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; }