Semafor, sınırlı beklemeyi tatmin ediyor mu, yoksa sadece karşılıklı dışlanmayı sağlıyor mu?do semaphores sınırlı beklemeyi yerine getiriyor
cevap
Aşağıda göreceğiniz gibi teorik bekleyen koşulu sınırlanmış molası verebilir
Cevap. Pratik olarak, hangi zamanlama algoritmasının kullanıldığına bağlıdır.
wait()
ve signal()
ilkel klasik uygulama gibidir:
//primitive
wait(semaphore* S)
{
S->value--;
if (S->value < 0)
{
add this process to S->list;
block();
}
}
//primitive
signal(semaphore* S)
{
S->value++;
if (S->value <= 0)
{
remove a process P from S->list;
wakeup(P);
}
}
bir süreç wait()
çağırır ve test "eğer", bir bekleme listesine kendisini koyacağız başarısız olduğunda. Aynı semaforda birden fazla işlem engellenirse, hepsi bu listeye konurlar (veya bir şekilde hayal edebileceğiniz gibi birbirine bağlıdırlar). Başka bir işlem kritik bölümden ayrılır ve sinyal() çağırırsa, bekleme listesindeki bir işlem uyanmak üzere seçilir, tekrar CPU için rekabet etmeye hazırdır. Ancak, bekleme listesinden hangi süreci seçeceğine karar veren programcıdır. Zamanlama, örneğin bir LIFO (ilk giren en son) tarzında uygulanmışsa, bazı işlemlerin açılmasının mümkün olması mümkündür. Eğer/uygular doğru semaforu kullanır rağmen
Örnek
T1: thread 1 calls wait(), enters critical section
T2: thread 2 calls wait(), blocked in waiting list
T3: thread 3 calls wait(), blocked in waiting list
T4: thread 1 leaves critical section, calls signal()
T5: scheduler wakes up thread 3
T6: thread 3 enters critical section
T7: thread 4 calls wait(), blocked in waiting list
T8: thread 3 leaves critical section, calls signal()
T9: scheduler wakes up thread 4
..
Gördüğünüz gibi, iplik 2 sınırsız bekleme süresi, yeni süreçlerin sürekli girerek neden hatta muhtemelen açlık vardır.
- 1. , mysql verilerini getiriyor ve json'ları sayfa başına sınırlı kayıtlarla kodlayabiliyor
- 2. async beklemeyi beklemiyor
- 3. Semaphores kullanarak koşul değişkenini nasıl uygulayabilirsiniz?
- 4. İş parçacığı sınırlı sınırlı kuyruk Boost 1.54
- 5. Sınırlı veri deposu sorgusu
- 6. AirTable'da sınırlı bir sorgu nasıl yapılandırılır
- 7. UIO interrupt için mono beklemeyi kullanma
- 8. AppDomain beklemeyi bekle Görev önleme SerializationException
- 9. Robot selenium2library global elemanlar için beklemeyi ayarlama
- 10. \ X1B (B` do
- 11. AngularJS'de $ do almak nedir?
- 12. Do notation sözdizimini
- 13. Python, sınırlı bir çoklu kalıtım biçimini destekler. Hangi şekilde sınırlı?
- 14. Outlook Kişilerini Python ile Getiriyor
- 15. sonsuz alıcı sorununu geri getiriyor
- 16. Sınırlı dict değerlerini Python
- 17. ajandada sınırlı tarih - primefaces
- 18. Sınırlı FPS'im: 60
- 19. Installshield Sınırlı Üretim - Sınırlamalar
- 20. InstallShield 2012 Sınırlı Sayıda
- 21. RODBC bağlantısı sınırlı satırlar
- 22. testi ile Karşılıklı Dışlama Sınırlı-bekleyen ve
- 23. Snackbar onclick do ondismiss eylemi
- 24. Sözdizimi hatası: "do" beklenmedik (bekliyor "}")
- 25. Gitlab deposu bozuk & Do önyüzü
- 26. `ActiveRecord with_connection do` & ActionController :: Live
- 27. java.lang.NumberFormatException: null - bir do döngüsünde
- 28. Do/while döngüsümden nasıl ayrılabilirim?
- 29. Sınırlı jenerik tür parametresini C#
- 30. Yineleme Sınırı Elle Sınırlı mı?