Threads in C, C ++, C ++ 0x, Pthread und Boost

8

Eine Frage zu Threads in C / C ++ ...

C ++ 0x Syntax

%Vor%

Wie viele Threads gibt es? Zwei (x und y) oder drei (x, y und main)? Kann ich this_thread::yield() in main aufrufen? Und was bekomme ich vom Aufruf von this_thread::get_id() in main?

Pthread-Syntax

%Vor%

Wie viele Threads gibt es? Zwei (x und y) oder drei (x, y und main)? Kann ich pthread_yield() in main aufrufen? Und was bekomme ich vom Aufruf von pthread_self() in main?

Boost-Syntax

%Vor%

Wie viele Threads gibt es? Zwei (x und y) oder drei (x, y und main)? Kann ich boost::this_thread::yield() in main aufrufen? Und was bekomme ich vom Aufruf von boost::this_thread::get_id() in main?

    
Giovanni Funchal 19.08.2009, 15:34
quelle

3 Antworten

25

In jedem Fall haben Sie zwei zusätzliche Threads erstellt, so dass Sie drei (x, y und main) haben. Sie erhalten eine unterschiedliche ID für jeden der Threads, einschließlich eines Anrufs in main.

    
Colin Gravill 19.08.2009, 15:38
quelle
0

Der Haupt-Thread ist immer da und Sie erstellen zusätzliche neue Threads. Wenn der Haupt-Thread abstirbt, stirbt das Programm oder das Verhalten ist nicht definiert. Es ist auch möglich, mit vielen Threads zu beginnen, da die Runtime starten kann (und oft - wie die linux_threads "pthreads" -Implementierung), Threads dort selbst.

Der Aufruf von yield ist immer möglich, da es dem os nur mitteilt, dass es den Rest der Zeitscheibe einem anderen Thread geben kann, wenn es einen mit derselben oder höherer Priorität gibt. Wenn Sie keine Low-Level-Synchronisationsfunktionen wie Spinlocks schreiben, gibt es keinen wirklichen Grund, die Ausbeute in Ihrer Anwendung jemals aufzurufen.

    
Lothar 26.08.2009 12:26
quelle
0

Alle obigen drei Implementierungen ergeben die gleichen Ergebnisse. Da der std :: -Thread über 'Pthread' implementiert ist, werden alle drei Threads erstellt. Main ist Ihr übergeordneter Thread und die anderen werden untergeordnete Threads und haben unterschiedliche IDs, wenn jeder Thread erstellt wird und der boost :: -Thread vom selben Autor wie von std :: thread erstellt wird, aber einige Verbesserungen hinzugefügt werden.

    
Ali786 17.06.2014 09:29
quelle