TL; Sahte uyanmaların DR varsayımı ("sözleşmesi"), iplik geçirme makinesinin gerçekçi bir şekilde uygulanmasına izin vermek için verilen makul bir mimari karardır.
Burada “performansla ilgili hususlar” önemsizdir, bunlar yayınlanmış bir yetkili referansta belirtildiği için yaygınlaşan yanlış anlaşılmalardır. - (sadece sormak yetkili referanslar bilirsin, hatalar olabilir Galileo Galilei ) Wikipedia makalesi mükemmel yayınlanan Atıf yapma onların biçimsel kurallara uygunluğunu çünkü sadece alıntı nota atıfta tutar.
Sahte uyanma kavramını tanıtmak için çok daha zorlayıcı bir sebep, SO'da bu cevabın, bu makalenin (eski versiyonunda) sunulan ek ayrıntılara dayanan cevabı verilmiştir:
Sahte uyanmalarla ilgili Wikipedia makalesinde şu hata mesajı var:
pthread_cond_wait()
Linux fonksiyon kullanılarak uygulanır futex
sistem çağrısı. Linux'taki her engelleme sistemi çağrısı EINTR
, işlem bir sinyal aldığında aniden geri döner . ... pthread_cond_wait()
beklemeyi yeniden başlatamaz, çünkü futex
sistem çağrısı dışında olduğu zamanlar içinde gerçek bir uyanışı kaçırabilir ...
Sadece bir düşünün ... herhangi bir kod gibi, iş parçacığı zamanlayıcısı, donanım / yazılımdaki anormal bir olay nedeniyle geçici olarak karartma yaşayabilir. Elbette, bunun mümkün olduğu kadar nadir olmasına özen gösterilmelidir, ancak% 100 sağlam yazılım diye bir şey olmadığından, bunun olabileceğini varsaymak ve programcının bunu tespit etmesi durumunda zarif toparlanmaya dikkat etmek makul olacaktır (örn. eksik kalp atışlarını gözlemleyerek ).
Şimdi, karartıcı sırasında bekleyen konuları bildirmek için bazı sinyalleri kaçırabileceğini göz önünde bulundurarak zamanlayıcı nasıl iyileşebilir? Zamanlayıcı hiçbir şey yapmazsa, "şanssız" dişler sonsuza dek bekleyecek şekilde sadece askıda kalacaktır - bundan kaçınmak için zamanlayıcı sadece tüm bekleyen dişlilere bir sinyal gönderir.
Bu, bekleyen iş parçacığının bir sebep olmadan bildirilebileceği bir “sözleşme” oluşturulmasını gerekli kılar. Kesin olarak, bir sebep olurdu - zamanlayıcı karartması - ama iş parçacığı (iyi bir nedenle) zamanlayıcı iç uygulama ayrıntılarına uymayacak şekilde tasarlandığından, bu nedenin "sahte" olarak sunulması daha iyi olur.
İplik perspektifinden bakıldığında, bu biraz Postel yasasına benziyor (diğer bir deyişle sağlamlık ilkesi ),
Yaptıklarınızda muhafazakar olun, Diğerlerinden kabul ettiğiniz şeyler konusunda liberal olun.
Sahte uyandırmaların varsayımı, ipliği ne olduğu konusunda muhafazakar olmaya zorlar : diğer konuları bildirirken durumu ayarlayın ve kabul ettiği şekilde liberal : beklemeden geri dönüş durumunda durumu kontrol edin ve henüz gelmediyse bekleyin.