Threads - Sincronização

3 respostas
J

Olá Pessoal …

  1. alguém sabe me dizer se existem semáforos, mutex ou outros mecanismos deste tipo para sincronização de threads em java ?

  2. Tenho uma curiosidade de saber como é implementado um mutex por exemplo, uma vez que a operação de leitura do mutex e o seu lock tem que ser atômicos … em linguagem de máquina, o que ocorre ?

valeu

3 Respostas

louds

Java tem monitors, todos objetos são monitor por sinal. Um monitor funciona como mutex e evento ao mesmo tempo, ou seja, vc tem uma operação para garantir acesso exclusivo e outra na qual threads ficam esperando por notificação.

“jctorelli”:

2) Tenho uma curiosidade de saber como é implementado um mutex por exemplo, uma vez que a operação de leitura do mutex e o seu lock tem que ser atômicos … em linguagem de máquina, o que ocorre ?
valeu

Leia o livro do Tanenbaun se voce quer 1 explicação melhor, por cima funciona assim:

1 mutex é composto de 3 elementos, 1 identificador de processo, 1 variavel de sincronização, 1 fila de espera.

o funcionamento é basicamente o seguinte:
pra adquirir 1 mutex:

sincroniza na variavel de lock
se pid == meu pid -> retorna //ja adquiri esse mutex
se pid == pid invalido -> pid = meu pid ; retorna //tava livre, adquirido!
senao entra na fila de espera //tem gente usando, vou esperar

pra liberar 1 mutex:

sincroniza na variavel de lock
se pid != meu pid -> retorna //esse mutex não é meu
pid = pid invalido
tira alguem da fila de espera

Bobinho ne? Pra adquirir 1 variavel de lock é ainda mais, via spinlock claro:

pra adquirir:

registrador reg = 1
enquanto reg != 0
EXCH reg, lock

pra liberar:

lock= 0

EXCH é a instrução do hardware para fazer troca atomica dos dados entre 1 registrador e 1 posicao de memoria.

ozielneto

Lidar com JavaThreads é uma coisa simples…

Entretanto, ter um modelo bem feito, com performance e que não entre em DeadLock, já é outro problema…

Consulte estes tutoriais, sao bem interessantes…
http://developer.java.sun.com/developer/onlineTraining/Programming/BasicJava1/

http://developer.java.sun.com/developer/onlineTraining/Programming/BasicJava2/

Bom estudo.

ozielneto

Mais um link muito interessante sobre JavaThreads…

http://developer.java.sun.com/developer/codesamples/thrds.html

Criado 13 de maio de 2003
Ultima resposta 13 de mai. de 2003
Respostas 3
Participantes 3