示例#1
0
void SimuladorSalida::liberarLugar(int numeroPosicion)
{
    stringstream mensajeLog;
    MemoriaCompartida<Posicion> memoria;
    Posicion posicion;

    //Bloqueo la posicion
    semaforos[numeroPosicion].p();
    mensajeLog << "Estacionamiento " << this->numeroEstacionamiento << " - Salida " << this->getNumeroSalida() << " - Tome el semaforo de posicion " << numeroPosicion;
    Log::getInstance()->loguear(mensajeLog.str());

    memoria = this->vectorMemoriaPosiciones[numeroPosicion];
    posicion = (Posicion) memoria.leer();
    posicion.setEstadoOcupado(false);

    memoria.escribir(posicion);

    this->vectorMemoriaPosiciones[numeroPosicion] = memoria;

    mensajeLog.str("");
    mensajeLog << "Estacionamiento " << this->numeroEstacionamiento << " - Salida " << this->getNumeroSalida() << " - Libero el semaforo de posicion " << numeroPosicion;
    Log::getInstance()->loguear(mensajeLog.str());

    //Desbloqueo la posicion
    semaforos[numeroPosicion].v();

    mensajeLog.str("");
    mensajeLog << "Estacionamiento " << this->numeroEstacionamiento << " - Salida " << this->getNumeroSalida() << " - Modifico la posicion " << numeroPosicion <<" poniendola como ocupada en el vector de posiciones.";
    Log::getInstance()->loguear(mensajeLog.str());
}
示例#2
0
bool SimuladorEntrada::modificarPosicionCompartida(int numeroPosicion)
{
	stringstream mensajeLog;

	bool pude = false;
	MemoriaCompartida<Posicion> memoria;
	Posicion posicion;

	//Bloqueo la posicion
	semaforos[numeroPosicion].p();

	mensajeLog << "Estacionamiento " << this->numeroEstacionamiento << " - Entrada " << this->getNumeroEntrada() << " - Tome el semaforo de posicion " << numeroPosicion;
	Log::getInstance()->loguear(mensajeLog.str());

	memoria = this->vectorMemoriaPosiciones[numeroPosicion];
	posicion = (Posicion)memoria.leer();

	//Si la posicion ya no fue ocupada
	if(!posicion.getEstadoOcupado())
	{
		posicion.setEstadoOcupado(true);
		memoria.escribir(posicion);
		this->vectorMemoriaPosiciones[numeroPosicion] = memoria;
		pude = true;
	}

	mensajeLog.str("");
	mensajeLog << "Estacionamiento " << this->numeroEstacionamiento << " - Entrada " << this->getNumeroEntrada() << " - Libero el semaforo de posicion " << numeroPosicion;
	Log::getInstance()->loguear(mensajeLog.str());

	//Desbloqueo la posicion
	semaforos[numeroPosicion].v();

	if(pude)
	{
		mensajeLog.str("");
		mensajeLog << "Estacionamiento " << this->numeroEstacionamiento << " - Entrada " << this->getNumeroEntrada() << " - Modifico la posicion " << numeroPosicion <<" poniendola como ocupada en el vector de posiciones.";
		Log::getInstance()->loguear(mensajeLog.str());
	}

	//Si devuelve true es que pudo ocupar la posicion, sino no pudo y devuelve false.
	return pude;

}