Created
March 18, 2013 23:28
-
-
Save maluta/5191948 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ** Semáforo ** | |
| Semáforo é um mecanismo amplamente utilizado, efetivo inclusive em sistemas multi-processados que consiste resolver um problema de sincronização da informação, ou seja, proteger o acesso a uma estrutuda-de-dados. Quando uma thread tenta acessar alguma informação, primeiro verifica um um contador que autoriza ou não o acesso. Um semáforo pode ser visto como um objeto composto por: | |
| (1) uma variável integer que é interpretada como um contador (counter) | |
| (2) uma lista de processos em espera | |
| (3) dois métodos atômicos down() e up() que atuam incrementado e decrementado o contador. | |
| Imaginando um caso de uso, um processo invoca o método down() que decrementa o valor [counter] do semáforo, se este novo valor for menor que zero, o processo é adicionado a lista de espera e bloqueado. Quando o método up() for executado, ele incrementará o valor do contador e se o resultado for maior ou igual a zero, ele reativa o processo na lista de espera do semáforo. | |
| É importante lembrar que nesta técnica cada estrutura de dados tem seu próprio semáforo e sempre tem seu c |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment