Semaphore ve Monitörler - fark nedir?


233

Bir Monitör ile Semafor arasındaki en büyük farklar nelerdir ?


8
Monitörü ikili bir semafor olarak düşünebilirsiniz.
Maxim Egorushkin


1
Lütfen bu albahari.com/threading/part2.aspx adresini ziyaret edin . Bu makaleyi okudum, şimdiye kadar okuduğum en iyi şey
Shantanu Gupta

5
Haklı olduğunu düşünmüyorum, Maxim. Bir semafor "alt düzey" bir yapıdır, yanılmıyorsam bir Monitör tam gelişmiş bir nesnedir. Üniversitedeki İşletim Sistemleri sınıfımda monitörlere kısaca geçtiğimizi hatırlıyorum, ancak bir Monitörün nesne odaklı olmasının yanı sıra bir Mutex'ten nasıl farklı olduğunu hatırlamıyorum. Bir sorunun monitörler kullanılarak yapılabileceğini hatırlıyorum, ancak aynı yöntemi C dilinin kısıtlamaları nedeniyle sınıfta kullanamadık.
user919860

1
Semafor ve Monitör, birbirinden uygulayabileceğiniz anlamında çok farklı, ancak güçte eşdeğerdir. Sen kendi eşdeğerlik kanıtlıyor Hoare'nın orijinal kağıt okuyabilir burada
Thanh DK

Yanıtlar:


529

Bir Monitör birden çok iş parçacığı erişim için tasarlanmıştır bir amacıdır. Bir izleme nesnesinin üye işlevleri veya yöntemleri karşılıklı dışlamayı zorlar, bu nedenle belirli bir zamanda nesne üzerinde herhangi bir eylem gerçekleştirebilir. Bir iş parçacığı şu anda nesnenin üye işlevini yürütüyorsa, o nesnenin üye işlevini çağırmaya çalışan diğer iş parçacıklarının ilk iş bitene kadar beklemesi gerekir.

Bir Semafor alt düzey bir nesnedir. Bir monitörü uygulamak için bir semafor kullanabilirsiniz. Bir semafor aslında sadece bir sayaçtır. Sayaç pozitif olduğunda, bir iplik semaforu almaya çalışırsa, buna izin verilir ve sayaç azaltılır. Bir iş parçacığı yapıldığında, semaforu serbest bırakır ve sayacı artırır.

Bir iş parçacığı semaforu almaya çalıştığında sayaç zaten sıfırsa, başka bir iş parçacığı semaforu serbest bırakana kadar beklemek zorundadır. Bir iş parçacığı bir semaforu serbest bıraktığında birden çok iş parçacığı bekliyorsa, onlardan biri onu alır. Bir semaforu serbest bırakan iş parçacığının onu elde eden iş parçacığı ile aynı olması gerekmez.

Monitör umumi tuvalet gibidir. Bir kerede yalnızca bir kişi girebilir. Başkalarının içeri girmesini önlemek, eşyalarını yapmak ve sonra giderken kilidini açmak için kapıyı kilitlerler.

Bir semafor bisiklet kiralama yeri gibidir. Belli sayıda bisikletleri var. Eğer denemek ve bir bisiklet kiralamak ve onlar-si olmak bir özgür o zaman sen-ebilmek almak o, aksi takdirde beklemek gerekir. Birisi bisikletini geri verdiğinde, başka biri bisikletini alabilir. Eğer bir bisikletiniz varsa, geri dönmek için başkasına verebilirsiniz --- bisiklet kiralama yeri, bisikletlerini geri aldıkları sürece kimin geri döndüğü umrunda değil.


162
+ 1 Ortak banyo ve bisiklet kiralama yeri ile büyük benzerlik. Şimdi ikisi arasındaki farkı asla unutmayacağım.
Drupad Panchal

4
Cevabınız stackoverflow.com/a/7336799/632951 .. ile çelişiyor gibi görünüyor, o zaman kim haklı?
Pacerier

6
@Pacerier: Ben :-) Tek çelişki yüksek seviyeli / düşük seviyeli şeydir. Sen olabilir o doğrusu, sadece çok düzenli değil, semafor bir monitör inşa çünkü bir monitör Semafora daha yüksek seviyeli bir yapıdır. Bir semafor sadece bekleyen bir sayaçtır. "Semaforların Küçük Kitabı" nı okumanızı öneririm greenteapress.com/semaphores
Anthony Williams

3
@AnthonyWilliams: Belki de sadece semaforlardan monitörler oluşturabileceğiniz fikrinden şüpheliyim. Diğer yol da mümkündür ve bu nedenle monitörün semaforlardan daha üst düzey bir varlık olduğunu bolca söyleyemeyiz.
Kavish Dwivedi

5
Evet, bir monitörden bir semafor oluşturabilirsiniz. Her zaman yüksek seviye nesnelerden düşük seviye nesneler oluşturabilirsiniz. Yüksek / düşük seviye şeyler, diğerini oluşturmak için kullanılabilecek değil, yetenekler ve çalışma kapsamı ile ilgilidir.
Anthony Williams

11

Aşağıdaki açıklama aslında monitörün wait () ve sinyalinin () semaforunun P ve V'den nasıl farklı olduğunu açıklar.

Bekleme () ve sinyal () bir koşul değişkenleri işlemler monitör benzer P ve V sayımı ile ilgili işlemler semaforlarıyla .

Wait ifadesi bir işlemin yürütülmesini engelleyebilir, bir sinyal ifadesi ise başka bir işlemin engellenmesine neden olabilir. Ancak, bazı farklılıklar varonların arasında. Bir işlem bir P işlemi yürüttüğünde, sayma semaforu sıfırdan büyük olabileceğinden, bu işlemi mutlaka engellemez. Bunun aksine, bir wait ifadesi yürütüldüğünde, işlemi her zaman engeller. Bir görev semaforda bir V işlemi gerçekleştirdiğinde, o semaforda bekleyen bir görevin engellemesini kaldırır veya kilidini açmak için bir görev yoksa semafor sayacını artırır. Öte yandan, bir işlem, engellenecek başka bir işlem olmadığında bir sinyal ifadesi yürütürse, koşul değişkeni üzerinde bir etkisi olmaz. Semaforlar ve monitörler arasındaki bir diğer fark, bir V işlemi ile uyanan kullanıcıların gecikmeden yürütmeye devam edebilmeleridir. Bunun aksine, bir sinyal işlemi ile uyanan kullanıcılar sadece ekranın kilidi açıldığında yeniden başlatılır. Ek olarak,

Link: daha fazla okumak için burada . Umarım yardımcı olur.


6

Bir Satır Cevabı:

Monitör: monitörde aynı anda yalnızca bir iş parçacığını çalıştırabilir. (tek iş parçacığını yürütmek için kilit almanız gerekir)

Semafor: paylaşılan bir kaynağı koruyan bir kilit. (kaynağa erişmek için kilidi edinmeniz gerekir)


5

Semafor, birden çok iş parçacığının (belirli bir sayıya kadar) paylaşılan bir nesneye erişmesine izin verir. Monitörler, paylaşılan bir nesneye karşılıklı olarak özel erişime izin verir.

monitor

Semafor


10
Peki, bir Monitör bir MutEx'ten nasıl farklı olabilir? Karşılıklı bir dışlama kilidi, bir semaforla aynı şeyi yapar, ancak bir kerede yalnızca bir iş parçacığının Kritik Bölgeye erişmesine izin verir.
user919860

2
Evet, bir mit ve bir muteks arasındaki fark nedir?
Pacerier

2
Semaforların paylaşılan bir nesneye erişimi değil, paylaşılan bir kaynağı (birden çok nesne içerecek) kontrol ettiğini belirtmek gerekir.
xbonez

@xbonez: Şuna bakarsak: java.util.ArrayListbirden çok nesnenin bir nesnesi mi, yoksa bir konteyner mi? Her ikisi de aynı zamanda. Semafor, erişimi kontrol etmek için uygun mudur? Şunu söyleyebilirim: hayır.
dma_k

Kabul edilen cevapta Monitörün Karşılıklı Dışlamayı uyguladığı belirtilmektedir. Lütfen bkz. "Bir monitör nesnesinin üye işlevleri veya yöntemleri karşılıklı dışlamayı zorlar, bu nedenle belirli bir zamanda yalnızca bir iş parçacığı nesne üzerinde herhangi bir eylem gerçekleştirebilir"
achoora

2

Kritik bir bölgeyi korumak için bir semafor kullanıldığında, semafor ile korunan veriler arasında doğrudan bir ilişki yoktur. Bu, semaforların kod etrafında dağılmasının nedeninin ve bekleme veya bildirmeyi unutmayı unutma nedeninin bir parçasıdır, bu durumda sonuç sırasıyla karşılıklı dışlamayı ihlal etmek veya kaynağı kalıcı olarak kilitlemek olacaktır.

Aksine, bu kötü şeylerin bir monitöründe olabilir. Bir monitör doğrudan verilere yorulur (verileri kapsüller) ve monitör işlemleri atom eylemleri olduğundan, giriş protokolünü çağırmadan verilere erişebilen kod yazmak imkansızdır. Monitör işlemi tamamlandığında çıkış protokolü otomatik olarak çağrılır.

Bir monitörün devam etmeden önce durum değişkeni biçiminde durum senkronizasyonu için yerleşik bir mekanizması vardır. Koşul yerine getirilmezse, süreç durumdaki bir değişiklik bildirilinceye kadar beklemek zorundadır. Bir işlem koşul senkronizasyonu beklerken, monitör uygulaması karşılıklı dışlama sorununu halleder ve başka bir işlemin monitöre erişmesini sağlar.

Açık Üniversite M362 Ünite 3 "Etkileşim süreci" ders materyallerinden alınmıştır.


Semaforlar bir dilde oldukça yaygın bir şekilde sunulmasına ve ders kitaplarında sınırlı atom operatörleri ile bir çeşit değişken olarak sunulmasına rağmen, semafor bir monitörün özel bir durumudur - çünkü sınırlı atom operatörleri ile bir çeşit değişken olduğu için, çünkü bir monitör budur. Semaforların "alt seviye" olduğu yönündeki argümanlar fevkalade.
philipxy

2

Semafor:

Eşzamanlı bir sistemdeki bazı paylaşılan kaynaklara erişimi kontrol etmek için bir sayaç veya bayrak kullanmak, Semaphore'un kullanılması anlamına gelir .

Misal:

  1. Sadece 50 Yolcunun herhangi bir Tiyatro / Otobüs / Tren / Eğlence yolculuğu / Sınıfının 50 koltuğunu (Paylaşılan kaynak) edinmesine izin veren bir sayaç. Ve yeni bir Yolcunun izin vermesi için, ancak birisi koltuğu boş bırakırsa.
  2. Herhangi bir Banyonun serbest / dolu durumunu gösteren ikili bir bayrak.
  3. Trafik ışıkları bayraklara iyi bir örnektir. Araçların Yollara geçişini düzenleyerek akışı kontrol ederler (Paylaşılan kaynak)

Bayraklar yalnızca Kaynak'ın geçerli durumunu gösterir, sayım veya kaynakta bekleyen veya çalışan nesneler hakkında herhangi bir bilgi yoktur.

Monitör:

Bir Monitör bazı koşul doğru olması için acquire erişim veya bekleme istemenizi, nesne ile ilgilenen iş parçacığı ile iletişim kurarak bir nesne erişimini eşitler.

Misal:

  1. Bir Baba kızı için bir monitör görevi görebilir ve her seferinde sadece bir adamla çıkmasına izin verebilir.
  2. Sadece bir çocuğun sınıfta konuşmasına izin vermek için cop kullanan bir öğretmen.
  3. Son olarak teknik bir işlem, bütünlüğü korumak için senkronize edilmiş bir Hesap nesnesindeki işlemler (iş parçacıkları aracılığıyla).

Sanırım yol haçındaki trafik ışığı da ikili bir bayrak: bir yoldaki veya ortogonal yoldaki arabalar (karşılıklı olarak özel) araba kullanabilirler, bu nedenle (3) örneği (2) ile aynıdır. Ayrıca bu örneklerin monitör kullanılarak uygulanabilen semaforlar (önemsiz durum) için köşe durum olduğunu düşünüyorum. Vikipedi'de daha tipik örnekler var .
dma_k
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.