Sobes.tech
Middle — Middle+

Unde și cum sunt utilizate semafoarele în arhitectura sistemelor software?

sobes.tech AI

Răspuns de la AI

Semaforii în arhitectura sistemelor software sunt utilizați pentru a gestiona accesul la resurse limitate într-un mediu multithread, prevenind condițiile de cursă și asigurând sincronizarea.

Scenariile principale de utilizare ale semafoarelor:

  • Limitarea numărului de fire de execuție care pot accesa simultan o resursă (de exemplu, un pool de conexiuni la o bază de date).
  • Coordonarea muncii firelor de execuție în timpul executării secțiunilor critice.
  • Implementarea mecanismelor de așteptare și notificare între fire.

În Java, semaforul este implementat în clasa java.util.concurrent.Semaphore.

Exemplu de utilizare a unui semafor pentru a limita accesul la o resursă la trei fire:

import java.util.concurrent.Semaphore;

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

    public void accessResource() {
        try {
            semaphore.acquire(); // Solicitare permisiune
            System.out.println(Thread.currentThread().getName() + " a obținut acces la resursă");
            // Lucru cu resursa
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        } finally {
            semaphore.release(); // Eliberare permisiune
            System.out.println(Thread.currentThread().getName() + " a eliberat resursa");
        }
    }
}

Astfel, semafoarele ajută la controlul accesului concurent și asigură o interacțiune corectă între fire în sisteme complexe.