2008-09-11 22 views
43

Ich habe fork() in C verwendet, um einen anderen Prozess zu starten. Wie starte ich einen neuen Thread?Wie starte ich Threads in Plain C?

+0

Es hängt von der Plattform ab. So funktioniert es unter Windows: [http://msdn.microsoft.com/en-us/library/ms682453.aspx](http://msdn.microsoft.com/en-us/library/ms682453.aspx) –

+0

Wie in der CreateThread-Dokumentation, mit der Sie verbunden sind, erläutert wurde, sollte, wenn das Programm die C-Laufzeitbibliothek verwendet, _beginthreadex verwendet werden, nicht CreateThread. – ChrisN

+0

Danke, das habe ich nicht bemerkt. Woher weißt du, ob du den CRT verwendest? Ich dachte, alles würde es benutzen. –

Antwort

50

Da Sie fork() erwähnt haben, nehme ich an, dass Sie auf einem Unix-ähnlichen System sind, in welchem ​​Fall POSIX threads (normalerweise als Pthreads bezeichnet) das sind, was Sie verwenden möchten.

Insbesondere ist pthread_create() die Funktion, die Sie benötigen, um einen neuen Thread zu erstellen. Seine Argumente sind:

int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * 
    (*start_routine)(void *), void * arg); 

Das erste Argument ist der zurückgegebene Zeiger auf die Thread-ID. Das zweite Argument sind die Thread-Argumente, die NULL sein können, es sei denn, Sie möchten den Thread mit einer bestimmten Priorität starten. Das dritte Argument ist die Funktion, die vom Thread ausgeführt wird. Das vierte Argument ist das einzelne Argument, das an die Thread-Funktion übergeben wird, wenn es ausgeführt wird.

+8

Hier ist ein Beispiel, wie man es benutzt: http://timmurphy.org/2010/05/04/pthreads-in-ca-minimal-working-example/ – tremendows

+1

Werden POSIX-Threads jetzt nicht als "plain C" gezählt, dass die C11 Standard definiert sie? – Hydronium

+0

Während die C11-Multithreading-API _heavily_ von POSIX-Threads beeinflusst wird, sind sie nicht identisch. Es scheint mir also nicht richtig zu sagen, dass POSIX-Threads "plain C" sind. –

2

prüfen schauen.

12

AFAIK, ANSI C definiert kein Threading, aber es sind verschiedene Bibliotheken verfügbar.

Wenn Sie unter Windows laufen, verlinken Sie zu msvcrt und verwenden Sie _beginthread oder _beginthreadex.

Wenn Sie auf anderen Plattformen laufen, sehen Sie sich die Pthreads-Bibliothek (ich bin sicher, es gibt auch andere).

8

Threads sind nicht Teil des C-Standards. Die einzige Möglichkeit, Threads zu verwenden, besteht in der Verwendung einiger Bibliotheken (zB: POSIX-Threads in Unix/Linux, _beginthread/_beginthreadex, wenn Sie die C-Runtime von diesem Thread verwenden wollen) oder nur CreateThread Win32 API)