Programação
concorrente
Registar um processo
Até aqui para enviarmos uma mensagem a um dado processo
necessitavamos de saber o seu Pid. Em muitos casos isso pode não ser
prático nem desejável, como por exemplo, num sistema com vários
servidores, ou sempre que um processo, por razões de segurança ou de
implementação, pretenda esconder a sua identidade.
O Erlang permite registar
um
processo com um nome único no
sistema (o nome terá, necessariamente, de ser um átomo). Assim,
para registar um processo com um dado nome é usada a primitiva register:
register(Nome,Pid)
Passa a ser possível comunicar com esse processo usando o seu
nome. A primitiva send (!) aceita nomes de processos como identificador
do destinatário da mensagem a enviar. Obviamente, continua a ser
possível enviar mensagens usando o Pid
do processo como identificador do destinatário.
Algumas primitivas básicas para lidar com processos registados:
Exercícios
1) Implemente um modelo cliente/servidor responsável pela gestão de contas bancárias. O processo servidor deve ser registado com o nome "banco". Deverão ser criadas as seguintes funções para o cliente:
Não são permitidas duas contas para o mesmo cliente. Não é possível levantar um montante superior ao saldo actual. Todas as funções devem devolver {Resultado,Valor}, em que Resultado pode ser 'erro' ou 'ok' e Valor a mensagem correspondente.
2) Implementar um sistema, constituído por 4 processos, que resolva
o seguinte somatório:
O sistema deverá ser descrito, no que respeita às mensagens transaccionadas, da seguinte forma: