예제 #1
0
void procesoDesBloqueado(int pIdHilo, int pPosicion){

    obtenerSemaforoMemoria (semaforoIdBloqueado);

    limpiarMemoria(pPosicion, 0, bloqueado);

    liberarSemaforoMemoria(semaforoIdBloqueado);
}
예제 #2
0
int start()
{
    int opcion = 0;
    ArrayList *calendario = al_newArrayList();
    cargarEventosDeArchivo(calendario);

    do
    {
        system("cls");
        printMenu();
        pedirInt(&opcion,"Ingrese una opcion:\n",7,1,"Ingrese una opcion valida. Entre 1 y 6\n");

        switch(opcion)
        {
            case NUEVO:
                if(crearNuevoEvento(calendario))
                    printf("Hubo un error al intentar crear el evento\n");
                pausa("Presione una tecla para volver\n");
                break;
            case CONSULTAR_DIA:
                if(consultarFecha(calendario))
                    printf("Hubo un error con la consulta\n");
                pausa("Presione una tecla para volver\n");
                break;
            case MODIFICAR:
                if(modificarEvento(calendario))
                    printf("No se pudo completar la modificacion\n");
                break;
            case ELIMINAR:
                if(eliminarEvento(calendario))
                    printf("No fue posible eliminar el evento\n");
                pausa("Presione una tecla para volver\n");
                break;
            case EXPORTAR:
                if(exportarCalendario(calendario))
                    printf("Hubo un error al intentar exportar el calendario\n");
                pausa("Presione una tecla para volver\n");
                break;
            case LIMPIAR:
                if(limpiarCalendario(calendario))
                    printf("No se pudo completar la operacion\n");
                    pausa("Presione una tecla para volver\n");
                break;
        }
    }while( opcion != SALIR);

    guardarEventosEnArchivo(calendario);
    limpiarMemoria(calendario);
    calendario->deleteArrayList(calendario);
    return 0;
}
예제 #3
0
void *CorrerHilo(void *pIdHilo){
    int idHilo = *(int*)pIdHilo;
    int posicion = 0;
    int posicionBloqueado;
    int tiempoEspera = getRandom(LIMINFTIELIN, LIMSUPTIELIN);
    int cantidadLineas = getRandom(LIMINFLINEAS, LIMSUPLINEAS);
    union semun arg;

    printf(" Se creo el proceso %i ...\n",idHilo);

    /*		Marca el proceso como bloqueado		*/
    posicionBloqueado = procesoBloqueado(idHilo);

    /*      Solicita el semaforo de memoria         */
    obtenerSemaforoMemoria (semaforoId);

	printf("El proceso %i bloqueo la memoria\n", idHilo);

	procesoDesBloqueado(idHilo, posicionBloqueado);

    /*		Espera si esta en modo lectura 		*/
    while(semctl(semaforoIdLectura, 0, GETVAL, arg) == 0){
    	printf(" Esperando lectura\n");
    	sleep(1);
    }

    /*  Marca el proceso que tiene acceso a la memoria      */
    obtieneAccesoMem(idHilo, accesoMemoria);

    /*      Asigana el proceso a memoria        */
	posicion = ejecutaralgoritmo(idHilo,cantidadLineas);

    /*      Verifica si encontro memoria       */
	if (posicion != -1){

        /*      Registra la accion en memoria       */
		escribirAccionBitacora(idHilo, "Asigna Memoria", obtenerTiempoActual(), posicion, cantidadLineas);

	}else
		printf("El proceso %i no encontro espacio en la memoria\n",idHilo);

	recorrerMemoria(datos,(int)*tamano);

    sleep(TIEMPOSLEEP);

    liberaAccesoMem(accesoMemoria);

	printf("El proceso %i des-bloqueo la memoria\n", idHilo);

    liberarSemaforoMemoria(semaforoId);

    /*       Verifica que si encontro espacio        */
    if (posicion != -1){
        printf("El proceso %i entro en espera\n", idHilo);
        sleep(tiempoEspera);

        printf(" Sacando proceso %i ...\n", idHilo); 

        posicionBloqueado = procesoBloqueado(idHilo);

        obtenerSemaforoMemoria (semaforoId);
        printf("El proceso %i bloqueo la memoria\n", idHilo); 

        procesoDesBloqueado(idHilo, posicionBloqueado);  

        /*      Espera si esta en modo lectura      */
        while(semctl(semaforoIdLectura, 0, GETVAL, arg) == 0){
            printf(" Esperando lectura\n");
            sleep(1);
        }

        obtieneAccesoMem(idHilo, accesoMemoria);

        /*      Libera la memria que ocupaba el proceso         */
        limpiarMemoria(posicion, cantidadLineas, datos);

        escribirAccionBitacora(idHilo, "Desasigna Memoria",obtenerTiempoActual(),posicion,cantidadLineas);

        liberaAccesoMem(accesoMemoria);

        printf("El proceso %i des-bloqueo la memoria\n", idHilo);

        liberarSemaforoMemoria(semaforoId);
    }

    pthread_exit(NULL);  
}