Superuser

Autor Thema: Thread abspalten  (Gelesen 3100 mal)

Oxygenic

  • Gast
Thread abspalten
« am: 09. April 2004, 03:01:36 »
Ich habe aktuell den folgenden Code, um einen POSIX-Thread abzuspalten:


pthread_t      thread1;
pthread_attr_t tattr;
int            rc;

rc=pthread_attr_init(&tattr);
...
rc=pthread_attr_setdetachstate(&tattr,PTHREAD_CREATE_DETACHED);
...
rc=pthread_create(&thread1,&tattr,&HandleBuildCommand_DoThread,MyConInfo);


So weit so gut, allerdings schlägt mir der letzte funktionsaufruf mit einem Fehler EAGAIN immer fehl. Ein Mangel an Ressourcen kann es kaum sein und wiederholte Aufrufe helfen auch nicht.

Was könnte hier die Ursache sein?

sonnenblen.de - Das unabhängige Sun User Forum

Thread abspalten
« am: 09. April 2004, 03:01:36 »

Oxygenic

  • Gast
Re: Thread abspalten
« Antwort #1 am: 09. April 2004, 16:18:31 »
Ursache gefunden: ich habe die Lib pthread (-lpthread) nicht mitgelinkt. Allerdins kackt er mir jetzt schon bein einem simplen

pthread_mutex_init(&mem->mutex_sock,NULL);

ab, interessanterweise erfolgt der Absturz aber in der libthread und nicht in der plibthread ... watt nu?

Oxygenic

  • Gast
Re: Thread abspalten
« Antwort #2 am: 09. April 2004, 22:09:11 »
Ich habe das Mutex-Problem etwas näher analysiert und es wird immer seltsamer. Es liegt offenbar daran, dass ich eine Variable vom Typ pthread_mutex_t verwende, die Teil einer Struktur ist! Rufe ich die Funktion pthread_mutex_init nicht wie oben mem->mutex_sock auf, sondenr lege mir eine lokale Valiable

pthread_mutex_t mutex_sock

an, die ich zum Initialisieren verwende, dann klappt alles problemlos. Das gleiche Spiel habe ich auch bei pthread_mutex_(un)_lock(), auch hier muss ich aus meiner Struktur jeweils erst in eine lokale Variable kopieren, damit es klappt.

Unions oder ähnliches sind nicht in der Nähe, so dass ich mir dieses Verhalten so gar nicht erklären kann. Auch läuft der gleiche Code unter Linux problemlos, so dass es auch kein kaputter Pointer sein kann...