No arquivo ServidorPrimos.java voc� encontrar� um exemplo de programa que cria uma thread por cliente. O programa ServidorPrimos � um servidor que aceita uma seq��ncia de n�meros (atrav�s de uma conex�o TCP) e, para cada n�mero, devolve ao cliente uma string que informa se o n�mero � primo ou n�o. Para cada conex�o recebida ele cria uma thread para lidar com a seq��ncia de n�meros oriunda desta conex�o. O recebimento de uma linha vazia (uma String vazia) indica que o cliente n�o tem mais n�meros para fornecer ao servidor.
Para deixar isso mais concreto, pense num cliente transferindo
da conta
para a conta
. O servidor pode passar por um estado
intermedi�rio, em que
j� foi subtra�do do saldo de
mas ainda
n�o foi adicionado ao saldo de
, mas esse estado n�o deve ser
vis�vel para nenhum outro cliente! Se, concorrentemente com a
transfer�ncia, algum cliente pedir (numa s� opera��o) os saldos
das duas contas, ele deve receber os dois saldos antes da transfer�ncia
ou os dois saldos depois da transfer�ncia, mas nunca um estado
intermedi�rio.
O programa ServContas deve garantir a isola��o das opera��es usando read/write locks (um lock por conta) e o protocolo two-phase locking (2PL) discutido em classe. Deve ser utilizada a implementa��o de read/write lock presente no pacote java.util.concurrent.locks.