2011-08-03 18 views
7

Powiel możliwe:
PThread vs boost::thread?Jakie są ważne elementy biblioteki Boost Thread lub Pthreads?

Używam Pthreads bibliotecznych przykłady programowania od czasu zrozumiałem, co jest wielowątkowość. Ostatnio natknąłem się na bibliotekę wątków Boost w Internecie i byłem ciekawy. Czy ktoś może określić, jakie są wyraźne różnice między tymi dwoma? Czy są jakieś dodatkowe przywileje od Boost, Jeśli tak, to co to jest?

Dzięki z góry, Shraddha

+0

@Code Monkey: Niezupełnie duplikat, ale większość odpowiedzi można zastosować na to pytanie. – akappa

Odpowiedz

2

Z mojego doświadczenia biblioteki boost :: thread posiada funkcjonalność, która bardzo ściśle powiązania z pthreads. W pthreadach są pewne rzeczy, które są zewnętrzne dla biblioteki boost :: thread, ale wciąż dostępne w boost (takie jak semafory, jak podano w boost :: interprocess).

Głównymi korzyściami, jakie widziałem, jest możliwość łatwiejszego [łatwiejszego] pisania kodu wieloplatformowego. Ponieważ biblioteka boost :: thread wydaje się być zaimplementowana jako wieloplatformowa warstwa interfejsu dla różnych prymitywów systemu operacyjnego, nie wierzę, że istnieją znaczące dodatkowe funkcje, które można znaleźć w boost :: thread, które nie byłyby dostępne w rzeczywiste interfejsy API systemu operacyjnego.

W rzeczywistości istnieją pewne podstawowe cechy systemu Windows, których nie udało mi się znaleźć prawdziwego odpowiednika, głównie z mojego doświadczenia z Win32, i prawie na pewno z powodu mojej ograniczonej ekspozycji na to, co jest dostarczane zarówno w boost :: biblioteki wątków i pthread.

0

Z documentation of Boost.Thread:

Boost.Thread umożliwia korzystanie z wielu wątków wykonania z danych udostępnionych w przenośnego kodu C++:

Portable

pthread jest coś, co należy do systemy unix, więc Twój kod nie będzie przenośny na (powiedzmy) Windows, jeśli użyjesz ich w swoim kodzie.

C++

Boost.Thread jest biblioteka C++, natomiast pthread jest "C" Biblioteka: jeśli aplikacja jest napisany w języku C++, a następnie można wykorzystać, że w celu uproszczenia kodu (np oddanie Thread s obiekty w pojemnikach, które rozumieją pojęcie Ruchome).

+0

@celavek: tak, więc? – akappa

11

Na projekt boost :: thread silnie wpłynęło oprogramowanie pthreads, ale oczywiście zostało zaprojektowane jako biblioteka C++ zamiast biblioteki C. Oto kilka różnic, które przychodzą mi na myśl. Nie twierdzę, że jest to wyczerpująca lista różnic.

Things pthreads ma ten boost :: thread brakuje:

Podczas korzystania z boost :: thread można pobrać pod spodem pthread_t (lub pthread_mutex_t, etc.), wywołując funkcję native_handle() dla członka i wykorzystując ją, aby odzyskać funkcjonalność, której nie dostarczono, bezpośrednio przez boost :: thread.

  • Ustaw parametry harmonogramu (pthread_attr_setschedparam)
  • zapytań Stos, manipulacja (pthread_attr_getstacksize)
  • Mutex/priorytet zapytanie, manipulacja (pthread_mutex_getprioceiling)

miejsca boost :: thread że ma pthreads nie ma:

Następujące rzeczy można zrobić w pthreads (po wszystkim boost :: thread jest zaimplementowany na pthreads). Ale nie ma wyraźnego i bezpośredniego API w pthreads do robienia tych rzeczy.

  • Różne rodzaje do uchwytu nici, a identyfikator wątku
  • identyfikator wątku, który może oznaczać „nie dowolny wątek”
  • Możliwość uruchomienia wątek na dowolnym funktora z dowolnych argumentów
  • zdolność do „call raz” arbitralną funktor z dowolnych argumentów
  • zdolność do zmiennej stan czekać na dowolnej zamykaną typu
  • Możliwość zablokowania wielu muteksy naraz bez impasu
  • przenośny sposób przechowywania nici identyfikatora w asocjacyjnych pojemników
  • wsparcia
  • RAII odblokowujące muteksy
Powiązane problemy