Pozwoliłem sobie założyć nowy wątek, żeby offtopa nie robić odpowiadając na post Egona:
Niemniej wątki są naprawdę trudne i zrobienie poprawnego kodu, który robi coś nietrywialnego wymaga dużej wiedzy i ostrożności.
LOL. Watki byc moze sa trudne ale tylko dla osob ktore nie wiedza co robia. Potem wlasnie mamy sleepy w kodzie albo losowo powstawiane sekcje krytyczne.
Używanie wątków + monitorów / sekcji krytycznych prowadzi do wykładniczej eksplozji liczby możliwych ścieżek wykonania programu. Udowodnienie, że żadna z nich nie prowadzi do uszkodzenia danych lub deadlocku jest możliwe tylko w najprostszych sytuacjach (np. dajesz jedną wielką sekccję krytyczna na wszystko). Ale to jest ucieczka przed problemem - sztuką jest zrobić kod tak, aby synchronizować w jak najmniejszej liczbie miejsc, zachowując poprawność. Jeśli obejmiesz za dużo sekcjami krytycznymi, to masz kiepską skalowalność. Jeśli z kolei pozwalasz na duże zrównoleglanie kodu, to analiza tego staje się trudna, a udowodnienie poprawności praktycznie niemożliwe.
Na dodatek błędy związane z wielowątkowością są zwykle bardziej "niedebugowalne" niż błędy związane z ręcznym zarządzaniem pamięcią. Każdy z nas robi błędy. Błąd w programie wielowątkowym może się nie objawiać przez długie lata, a ujawnić dopiero jak obciażenie wzrośnie albo kod zostanie przeniesiony na inny system operacyjny. Na ręczne zarządzanie pamięcią mamy lekarstwa (GC, Valgrind, Electric fence itp.), na wątki - na razie nic równie skutecznego.
// edit: dodałem ankietę, bo temat ogólnie jest ciekawy. Może przenieść do Inżynierii Oprogramowania?