Semaphore vs Mutex
Semafor, paralel programlama ortamlarında birden çok işlemin ortak bir kaynağa veya kritik bir bölüme aynı anda erişmediğinden emin olmak için kullanılan bir veri yapısıdır. Semaforlar ölü kilitleri ve yarış koşullarını önlemek için kullanılır. Mutex (Karşılıklı Dışlama Nesnesi) aynı anda birkaç eşzamanlı işlemle ortak bir kaynağa erişimden kaçınmak için de kullanılır.
Semafor nedir?
Semafor, kritik bölümlere karşılıklı dışlama sağlamak için kullanılan bir veri yapısıdır. Semaforlar çoğunlukla bekle (tarihsel olarak P olarak bilinir) ve sinyal (tarihsel olarak V olarak bilinir) adı verilen iki işlemi destekler. Bekleme işlemi, semafor açılana ve sinyal işlemi başka bir işlemin (iş parçacığı) girmesine izin verene kadar bir işlemi engeller. Her semafor bir bekleme işlemleri sırası ile ilişkilidir. Bekleme işlemi bir iş parçacığı tarafından çağrıldığında, semafor açıksa, iş parçacığı devam edebilir. Bir iş parçacığı tarafından bekleme işlemi çağrıldığında semafor kapatılırsa, iş parçacığı engellenir ve kuyrukta beklemesi gerekir. Sinyal işlemi bir semafor açar ve kuyrukta zaten bekleyen bir iş parçacığı varsa, bu işlemin devam etmesine izin verilir ve kuyrukta bekleyen iş parçacığı yoksa, sonraki iş parçacıkları için sinyal hatırlanır. Muteks semaforları ve sayma semaforları olarak adlandırılan iki tür semafor vardır. Muteks semaforları, bir kaynağa tek bir erişime izin verir ve sayma semaforları, birden çok iş parçacığının bir kaynağa erişmesine izin verir (birkaç birim kullanılabilir).
Mutex nedir?
Bir bilgisayar uygulaması başlatıldığında, bir muteks oluşturur ve bir kaynağa ekler. Kaynak bir iş parçacığı tarafından kullanıldığında, kilitlenir ve diğer iş parçacıkları onu kullanamaz. Başka bir iş parçacığı aynı kaynağı kullanmak istiyorsa, bir istekte bulunması gerekir. Daha sonra bu iş parçacığı, kaynakla ilk iş parçacığı bitene kadar bir sıraya yerleştirilir. İlk iş parçacığı kaynakla tamamlandığında, kilit kaldırılır ve kuyrukta bekleyen iş parçacığı kaynağa erişebilir. Sırada bekleyen birden çok iş parçacığı varsa, bunlara dönüşümlü olarak erişim verilir. Pratik olarak, muteks bir kaynağa erişimi birkaç iş parçacığı arasında değiştirdiğinde, birden çok iş parçacığı aynı anda bir kaynak tükettiği için görünür olacaktır. Ancak dahili olarak belirli bir zamanda kaynağa yalnızca tek bir iş parçacığı erişiyor.
Semaphore ve Mutex arasındaki fark nedir?
Semaforlar ve muteks nesneleri paralel programlama ortamlarında karşılıklı dışlama sağlamak için kullanılsalar da, bazı farklılıkları vardır. Muteks nesnesi yalnızca tek bir iş parçacığının bir kaynağı veya kritik bir bölümü kullanmasına izin verirken, semaforlar bir kaynağa sınırlı sayıda eşzamanlı erişime izin verir (izin verilen maksimum sayı altında). Mutex nesnelerinde, kaynağa erişmek isteyen diğer iş parçacıklarının, geçerli iş parçacığı kaynak kullanılarak bitinceye kadar kuyrukta beklemek zorundadır.