Mehrere Threads auf eine PThread struktur

Gast #2893484
Lesenswert?

Hallo zusammen,

wenn ich eine globale Variable
1
pthread_t stackworker;

habe und mit
1
pthread_create(&stackworker,NULL,&WorkerThread,this)

einen Thread (Thread 1) erzeuge, wird ein Thread erzeugt und 
abgearbeitet.
1
void * WorkerThread(void * arg) {
2

3
    // Process stack
4
    return NULL;
5
}

Wenn ich nun einen weiteren Thread (Thread 2) auf die 
Stackworkervariable erzeuge noch bevor Thread 1 beendet ist, so wird der 
Thread 2 erzeugt sobald Thread 1 endet.

Dies ist der Zustand den ich eigentlich möchte, nur:
Ist diese Methode auch so zulässig (evtl. Speicherlecks, etc...)??

Danke,
Michael

Background:
Ich habe Funktionen welche zwar sofort zurückkehren aber eine weitere 
Bearbeitung durch eine Messagequeue benötigen. Diese Queue bearbeite ich 
im Thread, welchen ich auch in der jeweiligen Funktion erzeuge. Die 
Queue im Thread wiederum kann eine Callbackfunktion aufrufen, welche 
wiederum eine Funktion aufruft welche einen Queue benötigt. D.h. Es wird 
ein neuer Queuethread in einem Queuethread erzeugt.
Die Threads sollen dabei nacheinander ablaufen.
1
void Foo1() {
2
 ...
3
 createThread();
4
}
5

6
void Foo2() {
7
 ...
8
 createThread();
9
}
10

11
void Thread() {
12
  ...
13
  Foo2(); // Thread wird nach Foo2 verlassen
14
}
#2895443
Lesenswert?

Hi Michael,

> Hat sich erledigt. Es laufen kurzzeitig zwei Threads parallel, Valgrind
> meldet kein Speicherleck.

Nee, so wird das nichts! Startest Du die Threads zu häufig, dann gehen 
dir die Ressourcen aus, denn

http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html

sagt:
1
A thread may either be joinable or detached.  If a thread is joinable, then
2
       another thread can call pthread_join(3) to wait for the thread to terminate
3
       and fetch its exit status.  Only when a terminated joinable thread has been
4
       joined are the last of its resources released back to the system.  When a
5
       detached thread terminates, its resources are automatically released back to
6
       the system: it is not possible to join with the thread in order to obtain its
7
       exit status.  Making a thread detached is useful for some types of daemon
8
       threads whose exit status the application does not need to care about.  By
9
       default, a new thread is created in a joinable state, unless attr was set to
10
       create the thread in a detached state (using pthread_attr_setdetachstate(3)).

Du musst also pthread_join aufrufen, um die Ressourcen des Threads 
freizugeben. Das geht aber nicht, da Du Dir den ersten pthread_t schon 
überschrieben hast...

Gruß,

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren