Döndürme kilitleri ve semaforlar arasındaki temel farklar nelerdir?
Döndürme kilitleri ve semaforlar arasındaki temel farklar nelerdir?
Yanıtlar:
Her ikisi de sınırlı bir kaynağı yönetir. İlk olarak ikili semafor (muteks) ve dönüş kilidi arasındaki farkı anlatacağım.
Sıkma kilitleri yoğun bir bekleme gerçekleştirir - yani döngü devam eder:
while (try_acquire_resource ());
...
release();
Çok hafif kilitleme / kilit açma gerçekleştirir, ancak kilitleme ipliği aynı kaynaklara erişmeye çalışacak başkaları tarafından önlenecekse, ikincisi CPU quanta'sından tükenene kadar kaynak elde etmeye çalışacaktır.
Öte yandan muteks daha çok davranıyor:
if (!try_lock()) {
add_to_waiting_queue ();
wait();
}
...
process *p = get_next_process_from_waiting_queue ();
p->wakeUp ();
Bu nedenle, iş parçacığı engellenmiş bir kaynak edinmeye çalışacaksa, bunun için uygun olana kadar askıya alınacaktır. Kilitleme / kilit açma çok daha ağırdır, ancak bekleme 'ücretsiz' ve 'adil' dir.
Semafor , birden çok kez (başlangıçtan itibaren bilinen) kullanılmasına izin verilen bir kilittir - örneğin 3 iş parçacığının kaynağı aynı anda tutmasına izin verilir, ancak daha fazla değil. Örneğin üretici / tüketici probleminde veya genel olarak kuyruklarda kullanılır:
P(resources_sem)
resource = resources.pop()
...
resources.push(resources)
V(resources_sem)
İşte bir cevap hızlı çekim: bir spin kilidi ve (sadece bir şey tarafından kullanılabilen bir kaynağı yöneten) bir ikili semafor neredeyse aynı. Onların farkı, spin kilitlerinin çalıştırılacak kodu yönetmesidir, ikili semaforlar ise bir tür tekil kaynağı yönetir (örn. Cpu zamanı, ekran çıkışı)
Bununla birlikte, düzenli bir semafor, bir kaynağa erişen ve birkaç taneye bölünebilen ancak sınırlı olan (ör. Bellek, ağ bant genişliği) birkaç iş parçacığını yönetebilir.
Kısacası, bir döndürme kilidinin bir semaforu bir kaynak kullanıp kullanamayacağını sormaya devam etmesi muhtemeldir. (Çocuğu tuvaleti kullanmak zorunda olduğunu ve başka birinin bitirmesini beklediğini düşünün.)
Kaynaklar: Sistem Programlamaya Giriş, İşletim Sistemleri ve wikipedia