2010-08-04 13 views
6

Chciałbym dowiedzieć się, jak zbudować aplikację wielowątkową, ale nie wiem nawet, od czego zacząć.Podstawowe wielowątkowość w C/C++ - wskazówki, porady, samouczek, jakiś kierunek?

Jak większość ludzi wdraża wielowątkowość? Czy używają biblioteki boost? Czy jest jakiś inny sposób na zrobienie tego? (używając standardowego C/C++)

Rozumiem tę koncepcję, ale zupełnie nie mam pojęcia, gdzie zacząć nawet uczyć się, jak to zrobić. Czy ktoś może polecić coś?

http://msdn.microsoft.com/en-us/library/7t9ha0zh%28v=VS.80%29.aspx < --- Czy są to standardowe C++ lub niektóre implementacje tylko dla Microsoft?

Czy poprawiam, że biblioteki wielowątkowości są zawarte w interfejsie API systemu Windows? Znalazłem przykład na MSDN ( http://msdn.microsoft.com/en-us/library/esszf9hw%28v=VS.80%29.aspx) i funkcje, które używa (ReleaseMutex, itp.) Wydają się być w windows.h. Czy to właśnie większość ludzi używa podczas programowania Windows?

+0

nie ma standardowych wątków C/C++. wątki boost to kolejna najlepsza rzecz http://stackoverflow.com/questions/415994/boost-thread-tutorials. C++ 0x ma wątki, jeśli chcesz iść tą trasą. – Anycorn

+0

Niedawno czytałem i wydaje mi się, że Microsoft Managed C++ poczynił pewne poważne odstępstwa od standardu C++, które mogą cię podstępem. Uważaj, że dokumentacja MSDN nie mówi o Managed C++, a nie o prawdziwym standaryzowanym C++. –

+0

Zapraszam do obejrzenia mojego projektu Tetris, który nadmiernie wykorzystuje wielowątkowość (głównie ze względu na samokształcenie): http://code.google.com/p/tetris-challenge/. – StackedCrooked

Odpowiedz

3

Biblioteka Boost to wieloplatformowy sposób korzystania z wątków.

Większość ludzi używa winapi lub pthreads. pthreads był pierwotnie używany w systemach POSIX, ale istnieje jego port dla mingw, który pozwala na jego użycie również w oknach.

Polecam używanie boost, jeśli absolutnie potrzebujesz rozwiązania wieloplatformowego lub masz już połączone biblioteki boost. Jeśli tworzysz dla Windows lub POSIX, użyj odpowiednio winapi lub pthreads.

+0

Po prostu użyj boost - Boost.Thread and Boost.Bind są moimi dwoma ulubionymi przyjaciółmi w tym tygodniu. –

+0

Użyłem też [winpthreads] (http://sourceware.org/pthreads-win32/) z MSVC. – sje397

2

Jeśli szukasz prostego wzrost wydajności w aplikacji przez wielowątkowości OpenMP to prosta biblioteka, która pozwoli program do skalowania w wielu rdzeni, wymagając jedynie #pragma umieszczenie w kodzie parallelize bloki kodu lub pętle, z dodatkowymi opcjami do słabej określonej wydajności.

To nie pozwala na łatwy równoległy podział, taki jak GUI/przetwarzanie/podział IO w aplikacji, ale pozwala na bardzo widoczne zwiększenie wydajności wielowątkowości na maszynach wielordzeniowych przy dużej liczbie cykli.

Powiązane problemy