Eine C++ Prozedur schreiben, die gleichzeitig zwei Prozeduren ausführt



  • Hi, ich kenne mich in c++ nicht so gut aus und frage mich, wie es möglich wäre, zwei Prozeduren gleichzeitig auszuführen, um meinen Dual-Core Prozessor auszubeuten.

    Grob betrachtet möchte ich die funktion f1 und f2 also zur selben Zeit ausführen.

    Wenn icb sie aber auf die übliche Weise schreibe :

    f1()
    f2()

    werden sie leider nacheinander ausgeführt, d.h. es wird nur mit der Funktion f2() begonnen, nachdem alles mit der Funktion f1() erledigt wurde.

    Gibt es eine einfache Lösung, damit die beiden Funktionen gleichzeitig ausgeführt werden ?

    Vielen Dank für ihre Antworten !



  • Es gibt verschiedene Möglichkeiten.
    Einerseits die Abstraktionen des OS zu nutzen, z.B. Threads.
    Oder eine Parallelisierungs Library, z.B. Open MP.

    Simon



  • boost threads:

    thread a(&f1), b(&f2);
    a.join();
    b.join();
    

    und fertig 😋

    MfG



  • Wobei threads nicht zu C- oder C++-Std. gehoeren, sondern durch POSIX-Std. geregelt sind. Bei der Nicht-Verwendung von boost muss <pthread.h> eingebunden werden.

    Ein guter Ueberblick hier:

    https://computing.llnl.gov/tutorials/pthreads/



  • hartmut1164 schrieb:

    Bei der Nicht-Verwendung von boost muss <pthread.h> eingebunden werden.

    Aber nur wenn das System diese Bibliothek unterstützt. Boost kapselt die OS-Spezifika.

    hartmut1164 schrieb:

    Wobei threads nicht zu C- oder C++-Std. gehoeren...

    Und dies stimmt noch. Die Boost-Threads bilden aber bereits im wesentlichen die Basis für die Threadingbibliothek des kommenden C++ Standards.



  • asc schrieb:

    hartmut1164 schrieb:

    Bei der Nicht-Verwendung von boost muss <pthread.h> eingebunden werden.

    Aber nur wenn das System diese Bibliothek unterstützt. Boost kapselt die OS-Spezifika.

    Das leistest schon der POSIX-Std. Der Vorteil von boost ist eher, dass es C++-Konzepte besitzt.

    <pthread.h> ist ein reiner C-Header, will man Classes, bzw. Class-Members, an pthread uebergeben, kann es schnell passieren, dass man seine C++-Classes wieder unter "C-Dachstrukturen" haengen muss - und das selten schoen aus.



  • hartmut1164 schrieb:

    asc schrieb:

    Aber nur wenn das System diese Bibliothek unterstützt. Boost kapselt die OS-Spezifika.

    Das leistest schon der POSIX-Std...

    Dir ist hoffentlich bewusst das der POSIX-Standard kein OS-Übergreifender Standard ist?

    Es gibt auch unter Windows Implementierungen um den POSIX zu emulieren, nichts desto trotz ist dieser nicht nativ über alle Systeme hinweg gültig (Und Windows selbst unterstützt den POSIX Standard nicht).

    Nachtrag: Und ich habe nicht gesehen das der OT explizit für UNIX-Systeme nachfragt.


Anmelden zum Antworten