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()); }
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; }