Semafor vs Mutex
Semafor, paralel programlama ortamlarında birden çok işlemin ortak bir kaynağa veya kritik bir bölüme aynı anda erişmemesini sağlamak için kullanılan bir veri yapısıdır. Semaforlar, kilitlenmelerden ve yarış koşullarından kaçınmak için kullanılır. Mutex (Karşılıklı Dışlama Nesnesi), aynı anda birkaç eşzamanlı işlem tarafından ortak bir kaynağa erişimi önlemek 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 esas olarak bekleme (tarihsel olarak P olarak bilinir) ve sinyal (tarihsel olarak V olarak bilinir) olarak adlandırılan iki işlemi destekler. Bekleme işlemi, semafor açılıncaya kadar bir işlemi engeller ve sinyal işlemi başka bir işlemin (iş parçacığının) girmesine izin verir. Her semafor, bir bekleme süreci kuyruğu ile ilişkilendirilir. Bir iş parçacığı tarafından bekleme işlemi ç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 bekleyen bir iş parçacığı varsa bu işlemin ilerlemesine izin verilir ve kuyrukta bekleyen iş parçacığı yoksa sinyal sonraki iş parçacıkları için hatırlanır. Mutex semaforları ve sayma semaforları olarak adlandırılan iki tür semafor vardır. Mutex semaforları, bir kaynağa tek bir erişime izin verir ve sayma semaforları, birden fazla iş parçacığının bir kaynağa erişmesine izin verir (birkaç birimi vardır).
Mutex nedir?
Bir bilgisayar uygulaması başlatıldığında, bir muteks oluşturacak ve onu bir kaynağa ekleyecektir. 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 isterse, bir istekte bulunması gerekir. Ardından, ilk iş parçacığı kaynakla bitene kadar bu iş parçacığı bir kuyruğa yerleştirilecektir. İlk iş parçacığı kaynakla bittiğinde, kilit kaldırılacak ve kuyrukta bekleyen iş parçacığı kaynağa erişebilir. Kuyrukta bekleyen birden fazla 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.
Semafor ve Mutex arasındaki fark nedir?
Paralel programlama ortamlarında karşılıklı dışlamayı sağlamak için hem semaforlar hem de muteks nesneleri kullanılsa da, aralarında bazı farklılıklar vardır. Bir mutex nesnesi yalnızca tek bir iş parçacığının bir kaynağı veya kritik bir bölümü tüketmesine izin verirken, semaforlar bir kaynağa sınırlı sayıda eşzamanlı erişime izin verir (izin verilen maksimum sayının altında). Mutex nesneleri ile, kaynağa erişmek isteyen diğer evreler, mevcut iş parçacığı kaynağı kullanarak bitene kadar bir kuyrukta beklemek zorundadır.