Minha tarefa é implementar um sistema de semáforo distribuído (links para a descrição) e um aplicativo para ele. Usarei soquetes Java, e ele usará matrizes de marcas d'água e filas de prioridade (não sei onde) e, portanto, estou curioso sobre como lidar com esse projeto. Especificamente, eu gostaria de saber o que é um bom objetivo de primeira etapa ou um subsistema simples que eu possa implementar. No momento, eu simplesmente não sei onde focar minha atenção.
O aplicativo é um sistema de licença flutuante - como em um laboratório de informática com apenas uma cópia de um software (talvez um programa CAD), que permite que apenas um PC por vez use o software. Quando uma máquina está usando o software, o acesso ao software é bloqueado. Quando a máquina termina de usá-la, ela desiste e quem foi o primeiro a solicitar deve ser o próximo.
Aqui está o algoritmo de pseudo-código mencionado - http://i.imgur.com/q9kRm.png
Respostas:
Considere começar com o subsistema "handshake" - aquele que permitirá que o aplicativo licenciado em execução em uma máquina específica registre uma sessão no servidor de licença e obtenha um token identificando-o exclusivamente para outras interações.
Eu acho que seria razoável para esse subsistema também incluir alguma "negociação" sobre outro protocolo de comunicação ("espera-se que os sinais de pulsação troquem a uma taxa entre 5 e 10 segundos" - coisas assim).
fonte
Resposta genérica
O semáforo é uma técnica de alocação de recursos para gerenciar deadlocks e condições de corrida por meio de filas prioritárias. Colocando metaforicamente, você tem 3 bicicletas para alugar. Suponha que você o contrate por ordem de chegada. Portanto, se você contratou todas as suas 3 bicicletas e uma quarta pessoa solicita, ele deve esperar até que uma delas devolva a bicicleta. Há chances de você reservar a bicicleta para alguém, alguém pode cancelar uma bicicleta já reservada e assim por diante. Semelhante no caso de processos que desejam adquirir alguns recursos, semáforos são usados.
No caso de um semáforo distribuído, pode haver vários recursos que podem ser acessados por vários processos. Suponha que um servidor hospede um aplicativo e possa hospedar várias instâncias dele e o usuário possa usá-lo se for gratuito. Seja o servidor S1, S2, .. Sn enquanto o aplicativo é A1, A2, ... An e os usuários sejam U1, U2, ... Un. Portanto, se o primeiro servidor pudesse hospedar três instâncias do aplicativo, seria indicado como S1A1, S1A2, S1A3. Também assuma as instâncias do aplicativo como slots ou caixas para facilitar o entendimento. Um slot é considerado vazio quando está livre e cheio quando está ocupado. Portanto, neste caso, o seguinte método é sugerido
Recursos recomendados
Resposta específica à pergunta no contexto
Observando o código, prefiro a versão clássica de um semáforo. O Java possui um pacote de semáforo incorporado para fazer isso e você pode facilmente construir nele.
Supondo que apenas uma instância do aplicativo deva ser executada na LAN
Vale a pena pensar nas seguintes advertências
Eu provavelmente sugeriria o seguinte para uma melhor compreensão
EDITAR Resposta completamente editada, pois a resposta original é baseada em uma perspectiva muito mais ampla
fonte