2011-01-07 9 views
0

Ich brauche die C# Threads Effekt in C++ OpenMP ..Themen in OpenMP C++

Thread t=new Thread(func1); 
t.Start(); // Do something 
// Do something else 

Hinweis erreicht werden, dass weder die Eltern oder das Kind zu verbinden wartet ..

Kann ich das in C++ OpenMP ??

Danke,

+0

Wie ich es verstehe, besteht der ganze Sinn von openMP darin, dass der Compiler den Code erzeugt, um mehrere Threads für Sie zu erzeugen. – Dima

+0

Was passiert, wenn ich einen Thread starten muss und nicht auf das Ende warten muss? – Betamoo

+1

Ich denke nicht, dass OpenMP das ist, wonach Sie suchen. Jede Standard-Threading-Bibliothek kann das tun, was Sie tun. OpenMP dient zum automatischen Parallelisieren von Codeabschnitten, die parallelisiert werden können. – Jimmeh

Antwort

2

OpenMP ist ein höheres Niveau Threading-Bibliothek als # Fäden C und oft fast automatisch einige Threading Serienanwendungen verwendet wird, hinzufügen. Mit der Anweisung , mit der der Code innerhalb des Anweisungsblocks in mehreren Threads automatisch ausgeführt wird, können Sie möglicherweise etwas Ähnliches erreichen. Sie könnten dann die Funktion in diesem parallelen Abschnitt aufrufen.

Die Stärke von OpenMP ist, dass es einfach ist, Threading mit wenigen Direktiven zum bestehenden Code hinzuzufügen. Ich habe es jedoch einfacher gefunden, eine Threading-Bibliothek auf niedrigerer Ebene zu verwenden, wenn ich etwas Kompliziertes (oder einfach so) machen möchte.

Wenn Sie etwas mit einer ähnlichen Schnittstelle zu C# -Threads möchten, werfen Sie einen Blick auf die Boost.Thread-Bibliothek. Damit können Sie in fast derselben Syntax tun, was Sie wollen:

#include <boost/thread.hpp> 

//creates the thread object and starts the thread, returns immediately 
boost::thread th(func1); 

//... 
//do something else 
//... 
+0

Das bedeutet, dass das, was ich verlange, in OpenMP nicht möglich ist? – Betamoo

+0

Wenn Sie nicht möchten, dass der Thread wieder in den Hauptthread einfließt, würde dies in OpenMP schwierig sein. Die meisten OpenMP-Konstrukte sind Blöcke, die den gesamten parallelen Betrieb vollständig enthalten und von denen angenommen wird, dass sie außerhalb des Blocks seriell sind (durch Verbinden am Ende des Blocks). Dies macht die Dinge leichter zu verstehen und nicht zu vermasseln, sondern begrenzt, was Sie tun können. Das ist nicht zu sagen, dass etwas, was Sie wollen, nicht mit OpneMP gemacht werden kann, ich denke nur, dass es ziemlich klobig werden würde. Ich habe OpenMP jedoch schon lange nicht mehr benutzt, daher könnte es einen einfachen Weg geben, den ich nicht kenne. –

+0

Die nächste Sache ist '#pragma omp parallele Abschnitte', gefolgt von einer '#pragma omp parallelen Abschnitt' Direktive für jeden Block von Code in einem anderen Thread zu laufen. Dies verbindet jedoch die Threads am Ende automatisch. –