Jaki jest najprostszy sposób tworzenia aplikacji wielowątkowych za pomocą C/C++?Jaki jest najprostszy sposób tworzenia aplikacji wielowątkowych za pomocą C/C++?
Odpowiedz
Niestety nie ma łatwego sposobu. Kilka opcji: pthread na linuxie, wątki ap32 win32 na windows lub boost :: biblioteka wątków
Jest to coś, co uważam za mało pomocne, szczególnie w porównaniu z rekomendacją boost. Posix nie jest łatwo przenośny do środowisk Win32, a API jest prymitywne, jak tylko możesz. – Jherico
Oczywiście, nie będzie to łatwe do programowania wielowątkowego, ale przynajmniej jest dobrze udokumentowane. –
pthreads są obsługiwane w systemie Windows: http://sourceware.org/pthreads-win32/ Wszystkie wątki API są prymitywne ... Jeśli chcesz wyższego poziomu niż możesz użyć wątku, lub aktorów, lub innej abstrakcji ponad wątkami. –
Jest nrłatwy sposób tworzenia wielowątkowych aplikacji w dowolny językowej.
To nie jest prawda. Wybór odpowiedniego języka do zadania może ułatwić programowanie wielowątkowe. – Amok
Pytam o najłatwiejszy sposób – SomeUser
Programowanie wielowątkowe może ** wyglądać ** łatwo, biorąc pod uwagę prosty język, ale jest to jeden z najtrudniejszych problemów programistycznych, aby uzyskać właściwy. * Jeśli uważasz, że jesteś wystarczająco inteligentny, aby zaimplementować poprawną wielowątkowość, to nie jesteś w najwyższym stopniu * – voyager
Powiedziałbym z Qt. Qt Threads i Qt Concurrency są prawdopodobnie warte googlowania.
Qt ma ładny threading support and documentation , ale jak inni ostrzegają, to nie jest dla początkujących. Łącze doc dałem sobie wskazuje na short reading list
Specyfikacja C++0x obejmuje gwintowania obiektów (jeden z moich ulubionych nowych funkcji). Wkrótce nie będzie miało znaczenia, dla którego systemu operacyjnego się kompilujesz! Wystarczy spojrzeć, jak łatwo jest stworzyć nowy wątek i dołączyć z powrotem do wątku Autor:
#include <thread>
#include <iostream>
class SayHello
{
public:
void operator()() const
{
std::cout<<"hello"<<std::endl;
}
};
int main()
{
std::thread t((SayHello()));
t.join();
}
Visual Studio 2010 jest wdrożenie części C++ 0x, ale wciąż czekamy na obiektach gwintów.
Tak długo, jak jesteś gotów pogodzić się z C++. Możesz zrobić to teraz w Javie, jeśli chcesz zrobić taką sprawę. –
Dude .. Pytanie określa C/C++. –
@James, chyba że coś się ostatnio zmieniło Nie sądzę, że std :: thread nie będzie kompletną alternatywą dla istniejących implementacji takich jak wątki POSIX. W szczególności brakuje jej funkcji, takich jak priorytety wątków. Zobacz tę odpowiedź SO, aby uzyskać szczegółowe informacje: http://stackoverflow.com/questions/1273572/will-pthreads-become-obablede-once-stdthread-makes-into-cox/1274301#1274301 ... Bez względu na to, nie można odmówić std :: wątek będzie bardzo miłym dodatkiem do standardu. – Void
Minęło trochę czasu, odkąd pracował w C++ i nie widziałem Boost gwintowania wspierać, ale uważam, że to bardzo pomocne do hermetyzacji semaphore usług świadczonych przez system operacyjny, zazwyczaj albo POSIX lub Win32, w prostych zajęć, które zdobądź zamki i uwolnij je w destruktorach, czyniąc ich użycie dość prostym.
void operateOnSharedResource(SharableResource & foo) {
MutexLock lock(foo.getMutex());
// do stuff to foo
// implicit call to MutexLock dtor performs release
}
Ostatecznie istnieje wiele prostych sztuczek, takich jak ten, aby ułatwić programowanie wątek i byłbym zaskoczony, gdyby doładowania nie ma czegoś takiego przez NOW (EDIT: To robi i to udokumentowane w Lock Types).
Bez względu na to, główny problem związany z pisaniem wielowątkowego kodu nie będzie rozwiązany przez żadną bibliotekę osób trzecich, a to jest zrozumienie, gdzie kod może być użytecznie zrównoleglony i gdzie udostępnione zasoby zostaną dotknięte i muszą być być rozliczane. Oto kilka reguł, z których korzystam podczas pisania wielowątkowego kodu.
- próbować minimalizować liczbę udostępnionych zasobów
- Spróbuj hermetyzacji zasobów udostępnionych w klasie opakowania, które sprawiają wszystko operacje atomowe.
- Dokonaj wątków roboczych jak najprostsze
Właściwa hermetyzacji naprawdę robi cuda na pisanie bezpieczniejszego kodu wielowątkowych, bo mniej rzeczy widać, tym mniej rzeczy może mieć sytuacji wyścigu.
Nie ma prostej odpowiedzi na to.To bardzo zależy od tego, co masz nadzieję zyskać dzięki wielowątkowości, platformie/kompilatorowi i modelowi, z którego chcesz korzystać. Każdy wątły interfejs API ma swoje pułapki.
I dlatego, że nikt dotąd o tym nie wspominał, OpenMP to kolejna opcja, która jest obsługiwana w wielu współczesnych kompilatorach głównego nurtu i ma na celu uproszczenie stosowania współbieżności. http://openmp.org/wp/
Wystarczy wspomnieć, bo to nie zostało wymienione: kompilator ze wsparciem OpenMP (http://openmp.org/wp/)
Całkowicie się zgadzam! – Jacob
Jeśli możesz dopasować swój program do tego modelu, to zdecydowanie jest to najłatwiejszy sposób. W rzeczywistości jestem w trakcie pisania krótkiego programu testowego z wykorzystaniem OpenMP z tego właśnie powodu. –
nie jestem pewien o najprostszy, ale IMO w większości biblioteki gwintowania przyjazny dla użytkownika jest tą zawartą w projekcie Poco C++. Aby uzyskać podgląd, spójrz na plik nagłówkowy Thread.h.
Nici Posixa są całkiem dobre, mają też świetną dokumentację i samouczki.
Nie tak łatwe jak wątki java, ale wciąż całkiem niezłe.
Wszystko zależy od tego, co robisz. Jeśli możesz dopasować to, co robisz do OpenMP, to jest droga do zrobienia. W przeciwnym razie możesz spojrzeć na Intel's TBB. TBB oferuje kilka przepływów pracy, do których powinieneś być zdolny, ale biblioteka jest podwójnie licencjonowana i możesz nie być w stanie zaakceptować żadnej z tych licencji. Jeśli zarówno OpenMP, jak i TBB są wyłączone, powinieneś rozważyć możliwości puli wątków systemu operacyjnego.
W pewnym momencie może być konieczne ugryzienie kuli i użycie funkcji Boost.Thread. Jeśli tak, to powinieneś spojrzeć na what makes multithreading in C++ hard (dobrze, aby przeczytać, nawet jeśli nie używasz C++ 0x: "To nie same wątki, to komunikacja powoduje problemy.Mutable shared state wprowadza niejawną komunikację" 3).
Boost.Thread jest stosunkowo łatwiejszy, ponieważ jest przenośny, dobrze udokumentowany i ma wysoki poziom API, taki jak scoped_try_lock.
Najprostszym sposobem jest unikanie/minimalizowanie zmiennego stanu dzielenia.
Gdy masz już zmienny stan współdzielony, musisz zająć się blokowaniem, w którym istnieje duża trudność w pisaniu programów wielowątkowych.
Poza wymienionymi wyżej, ACE to kolejna popularna i szeroko stosowana platforma C++, która zapewnia hermetyzację wątków na wielu platformach. Jego styl C++ nie jest tak nowoczesny jak na przykład Boost.Thread, ale jest dość dojrzały.
- 1. Preferowany sposób tworzenia aplikacji internetowych za pomocą programu m2eclipse
- 2. Jaki jest najprostszy sposób wywoływania adresu URL GET Http za pomocą Delphi?
- 3. Jaki jest najprostszy sposób dodania zdjęcia profilowego za pomocą klejnotu Omniauth-Facebook?
- 4. Jaki jest najlepszy sposób tworzenia interaktywnych prototypów aplikacji?
- 5. ANTLR Jaki jest najprostszy sposób realizacji języka Pythona?
- 6. Jaki jest najprostszy sposób wywołania adresu URL POST HTTP za pomocą Delphi?
- 7. Jaki jest najprostszy sposób na rozgałęzianie i łączenie za pomocą TortoiseSVN?
- 8. Jaki jest najprostszy sposób wyczyszczenia bazy danych z CLI za pomocą manage.py w Django?
- 9. Jaki jest najprostszy sposób wyświetlania plików statycznych za pomocą ASP.NET 5?
- 10. jaki jest najprostszy sposób na usunięcie pierwszej i ostatniej linii z pliku za pomocą awk?
- 11. Jaki jest najprostszy sposób na iterację w tablicy tablic?
- 12. Jaki jest najlepszy sposób tworzenia wewnętrznych produktów?
- 13. Jaki jest najlepszy sposób tworzenia wdrożeń ClickOnce
- 14. Jaki jest najlepszy sposób tworzenia wyszukiwania whois?
- 15. Jaki jest najprostszy sposób na uniknięcie HTML w Pythonie?
- 16. w jaki sposób uczynić pip zgodnym ze zmienną środowiskową "CC"
- 17. Jaki jest najprostszy sposób na usunięcie pustych NSStrings z NSArray?
- 18. Najlepszy sposób tworzenia ikony aplikacji
- 19. Jaki jest najprostszy sposób wykonania klasy Java co 30 sekund?
- 20. Jaki jest najprostszy sposób zdefiniowania zmiennej lokalnej w Oracle?
- 21. Jaki jest najprostszy sposób na stworzenie ukształtowanego okna w wxPythonie?
- 22. Jaki jest najprostszy sposób utworzenia żądania HTTP GET w Perlu?
- 23. Jaki jest najprostszy sposób obsługi zdarzenia SelectedItem z MVVM?
- 24. Jaki jest najprostszy sposób wyczyszczenia wszystkich pseudo klas na elemencie?
- 25. Jaki jest najprostszy sposób użycia szablonów widoku wąsów w szynach?
- 26. Jaki jest najprostszy międzyplatformowy sposób wyświetlania okien dialogowych w Pythonie?
- 27. Jaki jest najprostszy sposób na utrzymanie map/struktur w Clojure?
- 28. Jaki jest najprostszy sposób na aktualizację schematu mnesii?
- 29. Jaki jest najprostszy sposób, aby obraz był dotykalny w libgdx?
- 30. Jaki jest najprostszy sposób na zbudowanie strony z rezerwacją spotkania?
Najprostszym sposobem pisania programów współbieżnych jest niestosowanie wątków w sposób jawny. Co próbujesz zrobić? – Amok
Następną wersją języka C++, z miłością określaną jako C++ 0x, są coraz nowsze obiekty: http://en.wikipedia.org/wiki/C%2B%2B0x#Threading_facilities – luke
luke - to nadal nie będzie uczynić to prostym! –