Sobes.tech
Junior

Mi a különbség a mutex és a semaphore között?

sobes.tech MI

Válasz az MI-től

A mutex egy bináris szemafor, amely vagy szabad (érték 1), vagy foglalt (érték 0). A kritikus szakaszok védelmére szolgál, és kizárólagos hozzáférést biztosít az erőforráshoz. Csak az a szál, amelyik megszerezte a mutexet, tudja felszabadítani.

A szemafor egy általánosítás a mutexhez, amely egy számlálót képvisel. Nem negatív értékeket vehet fel, és az erőforrásokhoz való hozzáférés korlátozott számának kezelésére használják. Egy szál megszerezheti a szemafort, ha a számláló nagyobb nullánál, és felszabadíthatja (növelve a számlálót). A szemafor más szál által is felszabadítható, nem feltétlenül az, amelyik megszerezte.

Fő különbségek:

  • Cél: Mutex a kritikus szakaszok védelmére, Szemafor az erőforrások kezelésére.
  • Érték: Mutex (0 vagy 1), Szemafor (bármilyen nem negatív szám).
  • Tulajdon: A mutexnak van tulajdonosa (az a szál, amelyik megszerezte), a szemafornak nincs egyértelmű tulajdonosi fogalma.
  • Ki szabadíthatja fel: Csak a tulajdonos szabadíthatja fel a mutexben, minden szál felszabadíthatja a szemaforban.
#include <mutex> // std::mutex-hez
#include <semaphore> // std::counting_semaphore-hoz

std::mutex mtx; // Erőforrás védelmére szolgáló mutex

void critical_section() {
    mtx.lock(); // Mutex megszerzése
    // Megosztott erőforráshoz való hozzáférés
    mtx.unlock(); // Mutex felszabadítása
}

// Szemafor 5 erőforrás kezelésére
std::counting_semaphore<5> sem(5);

void access_resource() {
    sem.acquire(); // Erőforrás megszerzése (csökkenti a számlálót)
    // Erőforrás használata
    sem.release(); // Erőforrás felszabadítása (növeli a számlálót)
}

Összehasonlítás táblázatban:

Jellemző Mutex Szemafor
Típus Szinkronizációs objektum (bináris szemafor) Szinkronizációs objektum (számláló)
Érték 0 (foglalt), 1 (szabad) Nem negatív szám
Cél Kritikus szakaszok védelme, kölcsönös kizárás Hozzáférés korlátozott erőforrásokhoz
Tulajdon Van tulajdonosa (aki megszerezte) Nincs egyértelmű tulajdon fogalma
Ki szabadíthatja fel Csak a tulajdonos Bármely szál