Sobes.tech
Junior

Bir mutex ile semafor arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir mutex, ya da ikili semafor, ya serbest (değer 1) ya da meşgul (değer 0) olan ikili bir semafordur. Kritik bölümleri korumak ve kaynağa erişimi tekil hale getirmek için kullanılır. Sadece mutex'i alan iş parçacığı onu serbest bırakabilir.

Semafor, mutex'in genelleştirilmiş bir versiyonudur ve bir sayacı temsil eder. Negatif olmayan değerler alabilir ve sınırlı sayıda kaynağa erişimi yönetmek için kullanılır. Bir iş parçacığı, sayacı sıfırdan büyükse (ve onu azaltarak) semaforu alabilir ve serbest bırakabilir (sayacı artırır). Semafor, onu alan iş parçacığı olmayan başka bir iş parçacığı tarafından da serbest bırakılabilir.

Ana farklar:

  • Amaç: Mutex kritik bölümleri korumak için, Semafor kaynaklara erişimi yönetmek için.
  • Değer: Mutex (0 veya 1), Semafor (herhangi bir negatif olmayan sayı).
  • Mülkiyet: Mutex'in bir sahibi vardır (onu alan iş parçacığı), Semafor'un net bir mülkiyet kavramı yoktur.
  • Kim serbest bırakabilir: Mutex'te sadece sahibi serbest bırakabilir, Semafor'da herhangi bir iş parçacığı serbest bırakabilir.
#include <mutex> // std::mutex için
#include <semaphore> // std::counting_semaphore için

std::mutex mtx; // Kaynağı korumak için mutex

void critical_section() {
    mtx.lock(); // Mutex'i al
    // Paylaşılan kaynağa erişim
    mtx.unlock(); // Mutex'i serbest bırak
}

// 5 kaynağa erişimi yönetmek için semafor
std::counting_semaphore<5> sem(5);

void access_resource() {
    sem.acquire(); // Kaynağı al (sayacı azalt)
    // Kaynağı kullan
    sem.release(); // Kaynağı serbest bırak (sayacı artır)
}

Tablo halinde karşılaştırma:

Özellik Mutex Semafor
Tür Senkronizasyon nesnesi (ikili semafor) Senkronizasyon nesnesi (sayaç)
Değer 0 (dolu), 1 (boş) Negatif olmayan sayı
Amaç Kritik bölümleri korumak, karşılıklı dışlama Sınırlı kaynaklara erişimi yönetmek
Mülkiyet Sahibi vardır (onu alan iş parçacığı) Net bir mülkiyet kavramı yoktur
Kim serbest bırakabilir Sadece sahibi Herhangi bir iş parçacığı