Hombre, tampoco se han usado semaforos en sí, sino la idea detrás de ellos.
Siempre me gusta pensar alternativas a modo de pasatiempo, y quise proponer algo para un case obligatoriamente, pero es poco eficiente, lo más eficiente sería una estructura if else que basicamente viene a ser lo mismo que un case, algunos lenguajes como Python no incomporan case por esa misma razón.
Es más yo lo añadiria dentro de un try, porque siempre debes asumir que el usuario es tonto y tu le pides un numero pero a saber que te mete y tu programa explotará, con el try se evitaria.