Threading in c++?
-
Hey ihr alle, ich suche eine Möglichkeit, in C++ Threads zu verwenden, die ja meines Wissens nicht zum Standart gehören. Kennt da jemand eine Möglichkeit? Und wenn möglich auch ein deutsches Tutorial/Buch?
PS: Ja, hab auch schon Gegoogelt, aber nur Englisches gefunden, und ich möchte schon gern vollständig verstehen, worum es da geht...Danke schonmal..
-
Hallo,
Einerseits gibt es die Plattform-spezifischen APIs wie pthread_create(..) (posix) und CreateThread(..) bzw. _beginthreadex(..) (WinAPI), andererseits gibt es Libraries wie z.B. Boost, in der Boost.Thread enthalten ist.
(Andere Libraries sind z.B. POCO, ...).Simon
-
Und man sollte noch "Bibliotheken" (eher eine Art Compilererweiterung) wie TBB oder OpenMP erwähnen, bei denen man sich nicht mit den Details von Threads rumschlagen muss, damit aber eine der gängigsten Aufgaben von Threads, die Parallelisierung von Schleifen, sehr bequem durchführen kann. Schwierigere Threadkonstruktionen wie z.B. ein separater Eingabethread sind dafür damit nicht (zumindest nicht ohne Verrenkungen) möglich.
-
Naja, mit dem neuen Standard sind auch Threads Teil der Standardbibliothek geworden. Wenn du Glück hast unterstützt dein Compiler das schon, dann kannst du einfach das verwenden. Ansonsten kannst du dir mal boost.Thread anschaun, das ist mehr oder weniger die Vorlage nach der die neuen Standard-Threads entworfen wurden...
-
[quote="theta"]Plattform-spezifischen APIs wie pthread_create/quote]Aeh, nein!
-
knivil schrieb:
theta schrieb:
Plattform-spezifischen APIs wie pthread_create
Aeh, nein!
Äh, doch?
-
Vielleicht trifft es ein jain bezüglich pthreads.
pthreads oder POSIX Threads ist lediglich eine Spezifikation, die eine Schnittstelle beschreibt.
Implementationen dieser Spezifikation existieren für die meisten POSIX-Systeme
(weitestgehend allen POSIX-konformen UNIXoiden wie BSD, Linux oder Mac OS X).Im Gegensatz zu den oben genannten unterstützt Windows pthreads nicht nativ,
dafür gibt es aber ein Projekt, welches an einer Windows-Implementation arbeitet:
http://sourceware.org/pthreads-win32/Mit den Windows-Services for UNIX kommt übrigens auch eine native Umsetzung der pthreads für Windows daher.
Somit könnte man pthreads schon als plattformunabhängig bezeichnen...
Kommt eben darauf an, wie strikt man "plattformunabhängig" definiert.
-
Du erklärst gerade richtigerweise, dass es pthreads nur auf POSIX-konformen Plattformen gibt und behauptest dann, pthreads wären plattformunabhängig? Zumal auch noch die verbreitetste Plattform nicht POSIX-konform ist?
-
Ich glaube er meinte, dass der POSIX-Standard Plattform-unabhängig ist.
-
Offenbar hast du meinen Post nicht komplett gelesen...
Es gibt pthreads für Windows...Und Pi muss ich hier mal Recht geben

Es hindert einen niemand daran, die Spezifikation für irgendein Nicht-POSIX-System zu implementieren...
-
Danke an euch alle, ich glaub ich werd mir mal das Boost anschauen, das hört sich nicht schlecht an. Danke

-
SeppJ schrieb:
Du erklärst gerade richtigerweise, dass es pthreads nur auf POSIX-konformen Plattformen gibt und behauptest dann, pthreads wären plattformunabhängig? Zumal auch noch die verbreitetste Plattform nicht POSIX-konform ist?Du meinst Windows? Einer der wenigen nicht nur POSIX konformen sondern auch certifizierten OS. Dazu noch in der Version 1.0/1.X/2.0 schaltbar.
Old Billi hat nebenbei mit XENIX die erste 8086 UNIX Portierung auf ATNT Codebasis entwickelt, woraus später SystemV , Open Server und Solaris entstanden ist.
MS hat mehr mit UNIX zu tun als Linux auch Patentrechtlich.
-
Das ändert nix dran dass pthreads kein Teil von Win32 sind...
-
Stimmt, dafür hats mehr als die W32 API.
Wobei es natürlich seien könnte, dass unter der Api auch pthreads zum Einsatz kommen. Ist nicht ganz abwegig.
-
SFML hat auch Threads. Die bieten zwar weniger Features als Boost an, sind aber meiner Meinung nach etwas anfängerfreundlicher. Ist vor allem ein Gedanke wert, wenn man eh schon SFML verwendet.
Im neuen C++11 sind Threads mit
std::threadzudem Teil der Standardbibliothek.
-
Dean schrieb:
Stimmt, dafür hats mehr als die W32 API.
Was denn z.B.!?
Dean schrieb:
Wobei es natürlich seien könnte, dass unter der Api auch pthreads zum Einsatz kommen. Ist nicht ganz abwegig.
Doch, das ist sehr abwegig

-
Danke an euch alle, ich glaub ich werd mir mal das Boost anschauen, das hört sich nicht schlecht an. Danke

Was spricht gegen die Threads der Standardbibliothek? Wieso auf alternative Bibliotheken ausweichen, die fast exakt das Selbe Interface implementieren wie die Standardbibliothek?
-
Ethon schrieb:
Danke an euch alle, ich glaub ich werd mir mal das Boost anschauen, das hört sich nicht schlecht an. Danke

Was spricht gegen die Threads der Standardbibliothek? Wieso auf alternative Bibliotheken ausweichen, die fast exakt das Selbe Interface implementieren wie die Standardbibliothek?
Ich nenn dir einen einfachen Grund: Unterstützung von aktuellen Kompilern.

Grüssli
-
Dravere schrieb:
Ethon schrieb:
Danke an euch alle, ich glaub ich werd mir mal das Boost anschauen, das hört sich nicht schlecht an. Danke

Was spricht gegen die Threads der Standardbibliothek? Wieso auf alternative Bibliotheken ausweichen, die fast exakt das Selbe Interface implementieren wie die Standardbibliothek?
Ich nenn dir einen einfachen Grund: Unterstützung von aktuellen Kompilern.

Grüssli
GCC läuft überall. Der TE programmiert ganz offensichtlich privat, also könnte er auch den nehmen.

C++11 ist das Beste was C++ seit langem widerfahren ist, also soll jeder neuen Features einfach nutzen anstatt noch 10 Jahre C++03 zu programmieren, dann etablieren sich die Features auch schneller.

-
Ethon schrieb:
C++11 ist das Beste was C++ seit langem widerfahren ist, also soll jeder neuen Features einfach nutzen anstatt noch 10 Jahre C++03 zu programmieren, dann etablieren sich die Features auch schneller.

Aber nur Compiler wechseln, damit man statt
booststdhinschreiben kann?Oder kann man mit g++ einfach unter Visual Studio kompilieren? Auf diese IDE würde ich persönlich nämlich nur ungern verzichten. Und selbst dann denke ich, dass man sich viele nützliche Features wie den Debugger verbaut.
Davon abgesehen hatte z.B. TR1.Random in der g++-Standardbibliothek bei meiner letzten Benutzung noch einige Bugs, obwohl es schon ein paar Jahre existiert. Von daher bin ich gegenüber Neuerungen eher vorsichtig, auch bei Microsoft. Hingegen sind etablierte Boost-Bibliotheken wie Thread (gibts schon ein Jahrzehnt!) tendenziell recht stabil...