Zacznijmy od tyłu:
Jak to jest możliwe do wykonania gwintu w bibliotece?
Nie jest, przynajmniej nie w (czystym) C++. Wymaga to obsługi języka (kompilator jest tylko implementacją).
Obecnie 2 rzeczy są używane:
- kodu montażowym do niektórych części (jak w bibliotece
pthread
)
- szczegółowych instrukcji kompilatora dla innych (w zależności od kompilatora i platformy)
Obie są kruche i wymagają ogromnej ilości pracy do przenoszenia. Zasadniczo oznacza to wiele części w kodzie, aby przetestować kompilator i docelową architekturę, przetestować obsługę niektórych dyrektyw itp. ...
Dlatego uznano, że konieczne jest dodanie obsługi wątków w C++ 0x .
Jak wykonać wielowątkowość?
Jeszcze przed wyborem biblioteki należy wybrać metodę. Istnieją 2 sposoby programowania aplikacji wielowątkowych (i można je połączyć):
- komunikować się poprzez dzielenie: oznacza to, używając muteksy, operacje atomowe, itp ... można użyć
pthread
na platformach Linux, ale poleciłabym Boost.Thread
(między innymi) za jego przenośność.
- Udostępnij, komunikując się: nowsze i dostosowane do rozproszonych obliczeń, wynika to z języków funkcjonalnych. Oznacza to przekazywanie wiadomości z jednego wątku do drugiego i nie dzielenie się żadnymi zasobami. Możesz użyć FastFlow lub Intela Thread Building Blocks aka
TBB
.
Można połączyć dwa, ale lepiej byłoby nie. Osobiście uważam, że opis FastFlow jest całkowicie niesamowity: zachęca do programowania bez blokady. Główną zaletą drugiej metody jest to, że jest lepiej dostosowana do programowania wielu procesów i skal do rozproszonych środowisk.
Na początek polecam skupienie się na jednym i zbudowanie z nim niektórych aplikacji. Kiedy czujesz się komfortowo, możesz wypróbować drugą, ale bądź gotowy, aby rozpocząć od nowa.
Jako słowo ostrożności, będziesz musiał pomyśleć o wiele więcej na temat bezpieczeństwa wątków w C++. Nie można po prostu posypać synchronizujących słów kluczowych metodami klasowymi, aby były bezpieczne dla wątków. Generalnie będziesz używać narzędzi takich jak muteksy lub inne formy sekcji krytycznych, operacji atomowych itp. Jednak, jeśli zrobisz to dobrze, będziesz w stanie napisać bardzo wydajny kod wielowątkowy. Możesz nawet pisać własne alokatory pamięci z pulami pamięci dla wielu wątków, ale jest to znacznie niższy poziom i znacznie trudniejsze do napisania dla poprawności niż Java. – stinky472
(+1) @ stinky472: Właśnie dlatego chcę nauczyć się wielowątkowości w C++ oraz w Javie. Uważam, że Java jest ogólnie dobra do wprowadzania na wysokim poziomie wielu tematów, ale po prostu trzymanie się Javy może uratować programistę trochę za bardzo i nie narazić ich na kilka bardzo ważnych pojęć. Dlatego, podczas gdy uczę się wielowątkowości w Javie, chcę jednocześnie nauczyć się go w C++, aby upewnić się, że uczę się wszystkiego, czym powinienem być. – Cam