Skip to content

Instantly share code, notes, and snippets.

@maluta
Created March 18, 2013 23:28
Show Gist options
  • Select an option

  • Save maluta/5191948 to your computer and use it in GitHub Desktop.

Select an option

Save maluta/5191948 to your computer and use it in GitHub Desktop.
** 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