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.