C++11 std:: threads vs posix threads
Dlaczego mam preferować takie czy inne w praktyce?
Czym są różnice techniczne poza tym, że std::thread
jest klasą?
4 answers
Jeśli chcesz uruchamiać kod na wielu platformach, wybierz wątki Posix. Są one dostępne prawie wszędzie i są dość dojrzałe. Z drugiej strony, jeśli używasz tylko Linuksa / gcc std::thread
jest w porządku-ma wyższy poziom abstrakcji, naprawdę dobry interfejs i ładnie gra z innymi klasami C++11.
Klasa C++11 std::thread
niestety nie działa niezawodnie (jeszcze) na każdej platformie, nawet jeśli C++11 wydaje się dostępny. Na przykład w natywnym Androidzie std::thread
lub Win64 po prostu nie działa lub ma poważne ograniczenia wydajności (stan na 2012 r.).
Dobrym zamiennikiem jest boost::thread
- jest bardzo podobny do std::thread
(w rzeczywistości jest od tego samego autora) i działa niezawodnie, ale oczywiście wprowadza kolejną zależność od biblioteki stron trzecich.
Edit: od 2017 roku, std::thread
działa głównie na natywnym Androidzie. Niektóre klasy, jak std::timed_mutex
nadal nie są zaimplementowane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-12 12:05:49
Biblioteka std::thread
jest zaimplementowana na pthreads w środowisku obsługującym pthreads (na przykład: libstdc++).
std::thread
jest biblioteką klas C++. Biblioteka std::thread
zawiera wiele abstrakcyjnych funkcji, na przykład: blokady scoped, rekurencyjne muteksy, implementacje future / promise design pattern i wiele innych.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-30 11:18:38
std::thread
zapewnia przenośność na różnych platformach, takich jak Windows, MacOS i Linux.
Jak wspomniano przez @ hirshhornsalz w komentarzach poniżej i pokrewnej odpowiedzi https://stackoverflow.com/a/13135425/1158895, std::thread
może nie być jeszcze kompletna na wszystkich platformach. Mimo to, (będzie to w najbliższej przyszłości) powinno być faworyzowane przez pthread
'S, ponieważ powinno to uczynić Twoją aplikację bardziej przyszłościową.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:04
Dla mnie decydującą różnicą techniczną jest brak prymitywów obsługi sygnału w std w przeciwieństwie do pthreads. Niemożność prawidłowego dyktowania obsługi sygnału w procesie uniksowym przy użyciu samego std jest AFAIK wyniszczającą wadą w użyciu std:: thread, ponieważ bary jeden z konfigurowania w dobrej wierze wielowątkowy wzór obsługi sygnału przetwarzać wszystkie sygnały w dedykowanym wątku i zablokować je w pozostałej części. Jesteś zmuszony założyć, że wątek std::jest zaimplementowany przy użyciu pthreads I hope dla najlepszego wykorzystania pthread_sigmask. Prawidłowe obchodzenie się z sygnałami nie podlega negocjacjom w systemach Unixowych.
W 2016 roku, STD::thread jest zabawką; proste.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-20 05:09:59