Sobes.tech
Middle — Middle+

Onde e como são utilizados os semáforos na arquitetura de sistemas de software?

sobes.tech IA

Resposta da IA

Os semáforos na arquitetura de sistemas de software são utilizados para gerir o acesso a recursos limitados em ambientes multithread, prevenindo condições de corrida e garantindo a sincronização.

Os principais cenários de uso de semáforos:

  • Limitar o número de threads que podem aceder simultaneamente a um recurso (por exemplo, um pool de conexões a uma base de dados).
  • Coordenar o trabalho de threads ao executar secções críticas.
  • Implementar mecanismos de espera e notificação entre threads.

Em Java, o semáforo é implementado na classe java.util.concurrent.Semaphore.

Exemplo de uso de um semáforo para limitar o acesso a um recurso a três threads:

import java.util.concurrent.Semaphore;

public class ResourceAccess {
    private final Semaphore semaphore = new Semaphore(3);

    public void accessResource() {
        try {
            semaphore.acquire(); // Solicitar permissão
            System.out.println(Thread.currentThread().getName() + " obteve acesso ao recurso");
            // Trabalhar com o recurso
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        } finally {
            semaphore.release(); // Liberar permissão
            System.out.println(Thread.currentThread().getName() + " libertou o recurso");
        }
    }
}

Assim, os semáforos ajudam a controlar o acesso concorrente e garantem uma interação correta entre threads em sistemas complexos.