Вы находитесь на странице: 1из 7

Semfaro em Java

Professor Murilo Dantas Weverton V. de Castro

Semfaro em Java

Um semforo de contagem. Conceitualmente, um semforo mantm um conjunto de licenas. Cada acquire() bloqueia se necessrio, at uma autorizao est disponvel. Cada release() adiciona uma licena, potencialmente liberando uma thread. No entanto, nenhum objeto de licenciamento reais so usados, o Semfaro apenas mantm uma contagem do nmero disponvel e age em conformidade. Semforos so muitas vezes utilizados para restringir o nmero de threads que pode acessar algum recurso (fsico ou lgico).

Semfaro em Java

Antes de obter um item de cada segmento deve adquirir uma licena do semforo , garantindo que um item est disponvel para uso . Quando a discusso terminou com o item devolvido de volta para o pool e uma licena devolvida ao semforo , permitindo outra thread para adquirir esse item. Note-se que nenhum bloqueio de sincronizao realizada quando acquire() chamado como que impediria um item a ser retornado para o pool. O semforo encapsula a sincronizao necessria para restringir o acesso piscina, separadamente de qualquer sincronizao necessria para manter a consistncia da prpria piscina. Um semforo inicializado para um, e que utilizada de tal forma que ele s tem no mximo uma licena disponvel , pode servir como um bloqueio de excluso recproca. Esta mais comumente conhecido como um semforo binrio, porque s tem dois estados: um de licenas disponveis, ou zero de licenas disponveis . Quando usado desta forma, o semforo binrio tem a propriedade (ao contrrio de muitas implementaes de bloqueio ) , que o "lock" pode ser liberada por um segmento que no seja o proprietrio ( como semforos no tm noo de propriedade ) . Isto pode ser til em alguns contextos peculiares, tais como recuperao de impasse.

Semfaro em Java

O construtor para esta classe , opcionalmente, aceita um parmetro de justia. Quando definida como falsa , esta classe no faz nenhuma garantia sobre a ordem em que os tpicos adquirir licenas . Em particular, intrometendo permitido , ou seja, um fio invocando acquire() pode ser atribuda uma licena frente de um segmento que tem estado espera - logicamente o novo segmento se coloca no incio da fila de espera da thread . Quando a justia definida verdade , o semforo garante que tpicos invocar qualquer um dos mtodos adquirir so selecionados para obteno de licenas na ordem em que a sua invocao desses mtodos foi processado (first-in-first-out , FIFO) . Note-se que ordenao FIFO aplica-se necessariamente a pontos internos especficos de execuo dentro destes mtodos. Assim , possvel que uma rosca para invocar adquirir antes de outra , mas chegar ao ponto de pedir a seguir ao outro , e da mesma forma em cima do retorno do mtodo . Observe tambm que os mtodos tryAcquire de durao indeterminada no honram a configurao justia, mas ter todas as licenas que esto disponveis.

Semfaro em Java

Geralmente, os semforos usados para controlar o acesso de recursos deve ser inicializado como justo, para garantir que nenhum segmento est carente fora de acessar um recurso. Ao usar semforos para outros tipos de controle de sincronizao , as vantagens de transferncia de ordenao no-justo muitas vezes superam as consideraes de justia. Esta classe tambm fornece mtodos convenientes para adquirir e libertar mltiplos autorizaes de cada vez. Cuidado com o aumento do risco de adiamento indefinido quando esses mtodos so usados sem set justia verdadeira . Efeitos de consistncia de memria : Aes em uma linha antes de chamar um mtodo de "release" , como release( ) acontecer, antes que as aes aps a acquire" mtodo de sucesso , como acquire() em outro segmento .

Bibliografia: ohttp://docs.oracle.com/javase/6/docs/api/java/util/concurrent /Semaphore.html

Вам также может понравиться