Mi tarea es implementar un sistema de semáforo distribuido (enlaces a la descripción) y una aplicación para él. Usaré sockets Java, y usará matrices de marcas de agua y colas de prioridad (no estoy seguro de dónde), por lo que tengo curiosidad sobre cómo abordar este proyecto. Específicamente, me gustaría saber cuál es un buen objetivo de primer paso, o un subsistema simple que pueda implementar. Por el momento, no sé dónde enfocar mi atención.
La aplicación es un sistema de licencia flotante, como en un laboratorio de computación con solo una copia de un software (tal vez un programa CAD), que permite que solo una PC a la vez use el software. Cuando una máquina está utilizando el software, el acceso al software está bloqueado. Cuando esa máquina termina de usarla, se da por vencida y el que primero solicitó debe ser el siguiente.
Aquí está el algoritmo de pseudocódigo referenciado: http://i.imgur.com/q9kRm.png
Respuestas:
Considere comenzar con el subsistema "apretón de manos", el que permitirá que la aplicación con licencia que se ejecuta en una máquina en particular registre una sesión en su servidor de licencias y obtenga un token que lo identifique de manera única para futuras interacciones.
Creo que sería razonable que este subsistema también incluyera alguna "negociación" sobre el protocolo de comunicación adicional ("se esperará que las señales de latido se intercambien a una velocidad entre 5 y 10 segundos", cosas así).
fuente
Respuesta genérica
Semaphore es una técnica de asignación de recursos para gestionar puntos muertos y condiciones de carrera a través de colas de prioridad. Poniéndolo metafóricamente, tienes 3 bicicletas de alquiler. Suponga que lo contrata por orden de llegada. Entonces, si ha contratado todas sus 3 bicicletas y una cuarta persona lo solicita, debe esperar hasta que una de ellas haya traído la bicicleta. Hay posibilidades de que pueda reservar la bicicleta para alguien, alguien puede cancelar una bicicleta ya reservada y así sucesivamente. Similar en el caso de procesos que desean adquirir algunos recursos, se utilizan semáforos.
En el caso de un semáforo distribuido, podría haber múltiples recursos a los que podrían acceder múltiples procesos. Suponga que un servidor aloja una aplicación y puede alojar varias instancias de la misma y el usuario puede usar la aplicación si es gratuita. Deje que el servidor sea S1, S2, .. Sn mientras que la aplicación sea A1, A2, ... An y los usuarios sean U1, U2, ... Un. Entonces, si el primer servidor pudiera alojar tres instancias de la aplicación, entonces se denotaría como S1A1, S1A2, S1A3. Asuma también las instancias de la aplicación como ranuras o cuadros para una fácil comprensión. Una ranura se considera vacía cuando está libre y llena cuando está ocupada. Entonces, en este caso, se sugiere el siguiente método
Recursos recomendados
Respuesta específica a la pregunta en contexto.
Mirando el código, prefiero la versión clásica de un semáforo. Java tiene un paquete de semáforos incorporado para hacer esto y usted podría construirlo fácilmente.
Suponiendo que solo una instancia de la aplicación se ejecute en la LAN
Vale la pena pensar en las siguientes advertencias
Probablemente sugeriría lo siguiente para una mejor comprensión
EDITAR Respuesta completamente editada ya que la respuesta original se basa en una perspectiva mucho más amplia
fuente