TL; DR Założenie („kontrakt”) fałszywych pobudek to rozsądna decyzja architektoniczna podjęta w celu umożliwienia realistycznie solidnych implementacji narzędzia do usuwania wątków.
„Względy wydajnościowe” są tutaj nieistotne, są to tylko nieporozumienia, które stały się powszechne z powodu stwierdzenia w opublikowanym autorytatywnym odnośniku. (wiarygodne referencje mogą zawierać błędy, wiesz - po prostu zapytaj Galileo Galilei ) Artykuł w Wikipedii przechowuje odniesienie do cytowanej przez ciebie notatki tylko dlatego, że idealnie pasuje do ich formalnych wytycznych cytowania opublikowanej referencji.
O wiele bardziej przekonujący powód wprowadzenia koncepcji fałszywych pobudek podano w tej odpowiedzi na stronie SO, która jest oparta na dodatkowych szczegółach podanych w (starszej wersji) tego samego artykułu:
Artykuł w Wikipedii na temat fałszywych pobudek ma ten smakołyk:
pthread_cond_wait()
Funkcja w systemie Linux jest realizowany za pomocą futex
wywołania systemowego. Każde blokujące wywołanie systemowe w systemie Linux nagle wraca, EINTR
gdy proces odbierze sygnał. ... pthread_cond_wait()
nie może zrestartować oczekiwania, ponieważ może przeoczyć prawdziwe budzenie w krótkim czasie, gdy znajdowało się poza futex
wywołaniem systemowym ...
Pomyśl tylko o tym ... jak w każdym kodzie, harmonogram wątków może chwilowo zaniknąć z powodu czegoś nienormalnego w sprzęcie / oprogramowaniu. Oczywiście, należy zachować ostrożność, aby tak się stało tak rzadkie, jak to możliwe, ale ponieważ nie ma czegoś takiego jak 100% stabilne oprogramowanie uzasadnione jest założenie, to może zdarzyć się i dbać o wdzięcznym odzysku w przypadku, gdy planista wykryje ten (np obserwując brakujące bicie serca ).
W jaki sposób program planujący mógł się zregenerować, biorąc pod uwagę, że podczas awarii zasilania może brakować niektórych sygnałów, które mają powiadamiać oczekujące wątki? Jeśli program planujący nic nie zrobi, wspomniane wątki „pechowe” po prostu się zawieszą i będą czekać wiecznie - aby tego uniknąć, program po prostu wyśle sygnał do wszystkich oczekujących wątków.
Dlatego konieczne jest zawarcie „umowy”, że oczekujący wątek może zostać powiadomiony bez powodu. Mówiąc ściślej, istniałby powód - zaciemnienie programu planującego - ale ponieważ wątek został zaprojektowany (z dobrego powodu) tak, aby był nieświadomy wewnętrznych szczegółów implementacji programu planującego, powód ten prawdopodobnie lepiej przedstawić jako „fałszywy”.
Z perspektywy wątku przypomina to nieco prawo Postela (inaczej zasada solidności ),
bądźcie konserwatywni w tym, co robicie, bądźcie liberalni w tym, co akceptujecie od innych
Założenie fałszywych pobudek zmusza wątek do zachowania konserwatywności w tym, co robi : ustaw warunek przy powiadamianiu innych wątków i liberalny w tym, co akceptuje : sprawdź warunek przy każdym powrocie z oczekiwania i powtórz czekanie, jeśli jeszcze go nie ma.