La cuestión es la siguiente:
Tengo una aplicacion web que entre otras cosas realiza la inscripcion de usuarios en talleres. Los talleres tienen unas plazas limitadas, y necesito controlar que no se sobrepasen esas plazas. Cada vez que se intenta inscribir un usuario, compruebo si el numero de plazas es mayor numero de solicitudes de inscripcion y si hay plazas permito la inscripcion. El problema viene cuando solamente queda una plaza libre. En el mejor de los casos, el primer usuario que llegue la ocupará..
pero si dos usuarios justo en el mismo instante ven que queda una sola plaza, se inscribiran los dos.. Entonces habrá mas inscripciones que plazas y esto es un error.
El mismo problema tengo con la ocupacion de una aula en una determinada fecha.
Intentando buscar soluciones pensé en semaforos, pero como corro php bajo xamp en windows no es posible usar semaforos (lei que solo era posible en unix).
¿Esto en lo correcto?
Encontré también un metodo para bloquear un archivo y despues desbloquearlo
Código PHP:
$bloqueo = './bloqueo'; // Nombre del archivo de bloqueo
if (is_file ($bloqueo)) {
print "Lo siento, alguien ha bloqueado el sistema.\n" .
"Intente mas tarde.\n</pre>\n";
exit (1);
}
touch ($bloqueo); // Crear el archivo, creando en efecto un bloqueo
// Aqui se hacen todos los procesos criticos... Cosas interesantes que
// contribuyan con la dominacion del mundo, si se quiere.
$Resultado=$Taller->InscribirEnTaller();
//sleep (5); // Por ahora, solo retengamos es bloqueo por 5 segundos
unlink ($bloqueo); // Retirar el bloqueo
Y otro problema que se suma, es que si los demas usuarios quieren inscribirse en un taller del que tambien queda una plaza, aunque sean distintos talleres tambien les afecta. ¿Como bloquear solamente en ese taller y no en todos?
-Otra opcion que encontre era utilizar el patron Singleton.. pero probé y tampoco, se creaban instancias de Singleton desde cualquier clase :S
Alguien me puede ayudar?
Gracias por adelantado.