コード例 #1
0
ファイル: kernelPosta.c プロジェクト: Charlyzzz/estaCoverflow
int
main(int argc, char** argv)
{

  setvbuf(stdout, NULL, _IONBF, 0);

  readConfig(argv[1]);

  log_kernel = log_create(argv[2], "KERNEL", false, LOG_LEVEL_TRACE);
  log_info(log_kernel, "Se inicio el Kernel");

  initializateCollections();

  setupSemaphores();

  fillDictionaries();

  startCommunicationWithUMV();

  pthread_t hilo_PLP;
  pthread_t hilo_PCP;

  pthread_create(&hilo_PLP, NULL, *threadPLP, NULL );
  pthread_create(&hilo_PCP, NULL, *threadPCP, NULL );

  actualizarEstado();
  t_nodo_proceso* nodoAListo;
  while (1)
    {

      sem_wait(&sem_multiprog);
      sem_wait(&sem_listaNuevos);
      pthread_mutex_lock(&mutex_listaNuevos);
      nodoAListo = list_remove(listaNuevos, 0);
      pthread_mutex_unlock(&mutex_listaNuevos);
      log_info(log_kernel, "Moviendo PID %d a la lista de Listos",
          nodoAListo->pcb.pid);
      pthread_mutex_lock(&mutex_listaListos);
      queue_push(listaListos, nodoAListo);
      pthread_mutex_unlock(&mutex_listaListos);
      sem_post(&sem_listaListos);
      actualizarEstado();
    }

  pthread_join(hilo_PLP, NULL );
  pthread_join(hilo_PCP, NULL );

  return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: ariel2k/1110Programacion_UNLaM
int main()
{
    FILE *archEnt, *archSal = fopen("SALIDA.txt","wt");
    t_arbol arbol;
    int linea=1;
    t_reg registros;
    crearBinario();
    crearArbol(&arbol);
    if(abrirArchivo(&archEnt, n_arch, "r+b", CON_MSJ))
        mostrarArchivo(archEnt);

    while(!feof(archEnt))
    {
        fread(&registros, sizeof(t_reg), 1, archEnt);
    	if(registros.saldo==0.0 || registros.estado!='B') //Condiciones para guardar en arbol
    	{
    		ponerEnArbol(&arbol,&registros,linea);
            actualizarEstado(archEnt, registros);
    	}
    	linea++;
    }
    if(abrirArchivo(&archEnt, n_arch, "r+b", CON_MSJ))
        mostrarArchivo(archEnt);

    enOrden(&arbol, archSal);
    fclose(archSal);
    fclose(archEnt);
    return 0;
}
コード例 #3
0
ファイル: plp.c プロジェクト: Charlyzzz/estaCoverflow
void
encolarPCB(t_pcb * pcbNuevo, int peso, int socketCliente)
{
  t_nodo_proceso * nodoNuevo = malloc(sizeof(t_nodo_proceso));
  nodoNuevo->pcb = *pcbNuevo;
  nodoNuevo->peso = peso;
  nodoNuevo->soquet_prog = socketCliente;
  pthread_mutex_lock(&mutex_listaNuevos);
  list_add(listaNuevos, (void*) nodoNuevo);
  list_sort(listaNuevos, algoritmoSJF);
  pthread_mutex_unlock(&mutex_listaNuevos);
  sem_post(&sem_listaNuevos);
  actualizarEstado();

}
コード例 #4
0
ファイル: Nivel.c プロジェクト: julietaf/repo20132C
int atenderMensajePlanificador(int sockfd) {
	header_t h;
	t_list* asignados;
	int nbytes = validarRecive(sockfd, &h);
	if (nbytes) {
		char* data = malloc(h.length);
		switch (h.type) {
		case NOTIFICAR_DATOS_PERSONAJE:
			nbytes = recv(sockfd, data, h.length, MSG_WAITALL);
			tratarNuevoPersonaje(data);
			break;
		case UBICACION_CAJA:
			nbytes = recv(sockfd, data, h.length, MSG_WAITALL);
			tratarSolicitudUbicacionCaja(data);
			break;
		case NOTIFICACION_MOVIMIENTO:
			nbytes = recv(sockfd, data, h.length, MSG_WAITALL);
			tratarMovimiento(data);
			break;
		case SOLICITAR_RECURSO:
			nbytes = recv(sockfd, data, h.length, MSG_WAITALL);
			tratarSolicitudRecurso(data);
			break;
		case PERSONAJE_FINALIZO:
			nbytes = recv(sockfd, data, h.length, MSG_WAITALL);
			tratarFinalizacionPersonaje(data);
			break;
		case NOTIFICACION_RECURSOS_ASIGNADOS:
//			nbytes = recv(sockfd, data, h.length, MSG_WAITALL);
			asignados = esperarRecursosAsignados(h);
			actualizarEstado(asignados);
			list_destroy(asignados);
			dibujar();
			break;
		default:
			log_error(logFile,
					"Protocolo invalido (%d) para comunicarse con el nivel",
					h.type);
			break;
		}
		free(data);
	}
	return nbytes;
}