alguém sabe me dizer se existem semáforos, mutex ou outros mecanismos deste tipo para sincronização de threads em java ?
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 ?
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: