void traer_bloque(unsigned int etiqueta, unsigned int indice) { linea* l = cache[indice]; int i, j; /* comprobamos si hay alguna línea vacía */ i = 0; while((i < (asociatividad - 1)) && l[i].valido) i++; /* Si hay alguna línea vacía, "copiar" el bloque a esa línea, y establecer el "bit de validez" a cero. */ if(!l[i].valido) { l[i].etiqueta = etiqueta; l[i].valido = 1; } else { /* Si no hay ninguna línea vacía pasamos al algoritmo de reemplazo ... */ /* Seleccionamos él bloque a reemplazar, es decir, que bloque eliminamos */ if(es_lru) { /* Seleccionamos la línea cuyo contador es mínimo */ j = 0; for(i = 1; i != asociatividad; ++i) if(l[i].contador_lru < l[j].contador_lru) j = i; } else { /* seleccionamos una línea de forma aleatoria */ j = numero_aleatorio(0, asociatividad); } /* La línea con el bloque eliminado está vacía, y "copiamos" el nuevo bloque a esta línea */ l[j].etiqueta = etiqueta; } }
void MainWindow::enviarDado(void) { QString dado; if(conexao->isAtiva()) { /* Gera o dado aleatório, obtém a hora atual e faz o envio para o servidor. */ dado = QDateTime::currentDateTime().toString(Qt::ISODate) + " " + QString::number(numero_aleatorio(faixaInicio, faixaFim)); conexao->enviar(dado); /* Atualiza a lista de dados enviados inserindo o registro. */ model->insertRows(0, 1); model->setData(model->index(0), dado); } else { falhaConexao(); } }
int main ( void ){ const int PIPE_NUMBER = 2; int saldo = 20; int i,numero_aposta, instrucao_filho; int fd[PIPE_NUMBER][2]; pid_t pid; for(i=0; i<PIPE_NUMBER; i++){ if(pipe(fd[i]) == -1){ perror("Pipe failed"); return 1; } } pid = fork(); if(pid > 0){ for(i=0; i<PIPE_NUMBER; i++){ if(i==0){ close(fd[i][0]); continue; } if(i==1){ close(fd[i][1]); continue; } close(fd[i][1]); close(fd[i][0]); } do{ int number; printf("Introduza Número (entre 1 a 5):\n"); scanf("%d", &numero_aposta); if(numero_aposta == -1){ instrucao_filho = 0; }else{ instrucao_filho = 1; } /* validacao de numero introduzido pelo utilizador */ while(numero_aposta >5 || (numero_aposta <1 && numero_aposta !=-1) ){ system("clear"); printf("Introduza Número Válido (entre 1 a 5):\n"); scanf("%d", &numero_aposta); } /* escreve instrucao ao filho: 1 ou 0*/ close(fd[0][0]); write(fd[0][1], &instrucao_filho, sizeof(int)); if(numero_aposta == -1) break; /* le numero de aposta */ close(fd[1][1]); read(fd[1][0], &number, sizeof(int)); if(number == numero_aposta){ saldo +=10; printf("Acertou!\n"); }else{ saldo -= 5; printf("Falhou!\n"); if(saldo <= 0){ instrucao_filho = 0; close(fd[0][0]); write(fd[0][1], &instrucao_filho, sizeof(int)); printf("Perdeu!!! Número Aleatório %d\n", number); return 0; } } close(fd[0][0]); write(fd[0][1], &saldo, sizeof(int)); printf("Número de Aleatório %d\n", number); printf("Saldo: %d\n\n\n", saldo); }while(numero_aposta != -1 || saldo >0); close(fd[1][0]); close(fd[0][1]); }else if(pid == 0){ int saldo = 20; int instrucao_do_pai; int numAleatorio; for(i=0; i<PIPE_NUMBER; i++){ if(i==0){ close(fd[i][1]); continue; } if(i==1){ close(fd[i][0]); continue; } close(fd[i][1]); close(fd[i][0]); } do{ /* recebe instrucao do pai */ close(fd[0][1]); read(fd[0][0], &instrucao_do_pai, sizeof(int)); /*close(fd[0][0]);*/ if(instrucao_do_pai == 1){ numAleatorio = numero_aleatorio(); /* passa numero aleatorio */ close(fd[1][0]); write(fd[1][1], &numAleatorio, sizeof(int)); /*close(fd[1][1]);*/ /* recebe numero do pai: 1 se acertou ou -1 se errou */ close(fd[0][1]); read(fd[0][0], &saldo, sizeof(int) ); } }while(instrucao_do_pai != 0); close(fd[0][0]); close(fd[1][1]); exit(1); } return 0; }