TL; DR Asumsi ("kontrak") wakeups palsu adalah keputusan arsitektur yang masuk akal yang dibuat untuk memungkinkan implementasi thread sheduler yang realistis dan kuat.
"Pertimbangan kinerja" tidak relevan di sini, ini hanya kesalahpahaman yang meluas karena dinyatakan dalam referensi resmi yang diterbitkan. (referensi resmi mungkin memiliki kesalahan, Anda tahu - tanyakan saja kepada Galileo Galilei ) Artikel Wikipedia menyimpan referensi ke catatan yang Anda kutip hanya karena sangat cocok dengan pedoman formal mereka mengutip referensi yang diterbitkan.
Alasan yang jauh lebih menarik untuk memperkenalkan konsep bangun palsu disediakan dalam jawaban ini di SO yang didasarkan pada perincian tambahan yang disediakan dalam (versi yang lebih lama) dari artikel itu:
Artikel Wikipedia tentang wake up palsu memiliki berita gembira ini:
The pthread_cond_wait()
fungsi dalam Linux diimplementasikan dengan menggunakan futex
system call. Setiap panggilan sistem pemblokiran di Linux kembali dengan tiba-tiba EINTR
ketika proses menerima sinyal. ... pthread_cond_wait()
tidak dapat memulai kembali menunggu karena mungkin akan melewatkan bangun yang nyata dalam waktu sedikit di luar futex
system call ...
Bayangkan saja ... seperti kode apa pun, penjadwal thread mungkin mengalami pemadaman sementara karena sesuatu yang tidak normal terjadi pada perangkat keras / lunak yang mendasarinya. Tentu saja, kehati-hatian harus dilakukan agar hal ini terjadi sesering mungkin, tetapi karena tidak ada perangkat lunak yang kuat 100%, masuk akal untuk menganggap ini bisa terjadi dan berhati-hati pada pemulihan yang anggun jika jadwalnya mendeteksi hal ini (mis. dengan mengamati detak jantung yang hilang ).
Sekarang, bagaimana scheduler dapat pulih, dengan mempertimbangkan bahwa selama pemadaman itu bisa kehilangan beberapa sinyal yang dimaksudkan untuk memberi tahu utas menunggu? Jika scheduler tidak melakukan apa-apa, disebutkan thread "sial" hanya akan menggantung, menunggu selamanya - untuk menghindari ini, scheduler hanya akan mengirim sinyal ke semua utas menunggu.
Ini membuatnya perlu untuk membuat "kontrak" bahwa utas menunggu dapat diberitahukan tanpa alasan. Tepatnya, akan ada alasan - pemadaman penjadwal - tetapi karena utas dirancang (untuk alasan yang baik) untuk tidak mengetahui detail implementasi internal penjadwal, alasan ini kemungkinan lebih baik untuk ditampilkan sebagai "palsu".
Dari perspektif utas, ini agak menyerupai hukum Postel (alias prinsip ketahanan ),
menjadi konservatif dalam apa yang Anda lakukan, menjadi liberal dalam apa yang Anda terima dari orang lain
Asumsi wakeups palsu memaksa thread untuk menjadi konservatif dalam apa yang dilakukannya : menetapkan kondisi ketika memberi tahu thread lain, dan liberal dalam apa yang diterimanya : periksa kondisi setelah kembali dari menunggu dan ulangi tunggu jika belum ada.