2009-04-10 8 views
1

pthread_create gibt den Wert 251 zurück, ohne den Thread zu erstellen. Weiß jemand, was das Problem ist? Bitte helfen Sie. Das Gerät ist ein HP-UX.Pthread gibt 251 zurück

Ich bin neu in Multithreading.

#include <stdio.h> 
    #include <stdlib.h> 
    #include <pthread.h> 

    void *print_message_function(void *ptr); 

    main() 
    { 
     pthread_t thread1, thread2; 
     char *message1 = "Thread 1"; 
     char *message2 = "Thread 2"; 
     int iret1, iret2; 
     /* Create independent threads each of which will 
     * execute function */ 

     iret1 = pthread_create(&thread1, NULL, print_message_function, (void*) message1); 
     iret2 = pthread_create(&thread2, NULL, print_message_function, (void*) message2); 

     /* Wait till threads are complete before 
     * main continues. Unless we */ 
     /* wait we run the risk of executing an 
     * exit which will terminate */ 
     /* the process and all threads before the 
     * threads have completed. */ 

     pthread_join(thread1, NULL); 
     pthread_join(thread2, NULL); 
     printf("Thread 1 returns: %d\n",iret1); 
     printf("Thread 2 returns: %d\n",iret2); 
     exit(0); 
    } 

    void *print_message_function(void *ptr) 
    { 
     char *message; 
     message = (char *) ptr; 
     printf("%s \n", message); 
    } 

Antwort

4

Bearbeiten: Auf HP-UX11. pthread_create schlägt mit Fehler 251 fehl: Funktion ist nicht verfügbar.

Überprüfen Sie, ob -lc in Ihrer Verknüpfungsreihenfolge vor -lpthread steht. Wenn dies der Fall ist, würde der Aufruf auflösen C-Bibliothek Stumm und könnte diesen Fehler verursachen.


Haben Sie eine Verknüpfung mit -lpthread?

Sie sollten errno.h verwenden, um zu sehen, welche Fehler 251 auf Ihrem System ist oder dies sollte Ihnen eine detaillierte Nachricht:

printf("%s\n", strerror(errno)); 

Wenn darüber hinaus Pthread verwenden, sollten Sie für den Rückgabewert überprüfen von fast jeder Anruf * pthread (siehe man jede Funktion für mögliche Fehler überprüfen zurückgegeben)

für pthread_create, müssen Sie mindestens zwei mögliche Fehler (je nach System und pthread-Implementierung):

pthread_create() fehl, wenn:

[EAGAIN] Das System die notwendigen Ressourcen fehlt einen anderen Thread zu schaffen, oder die System auferlegten Grenze für die Gesamtzahl der Fäden in einem Prozess [PTHREAD_THREADS_MAX] überschritten würde .

[EINVAL] Der durch attr angegebene Wert ist ungültig.

0

Dies kompiliert und läuft auf meiner Linux-Box mit folgendem Ergebnis:

Thread 1 
Thread 2 
Thread 1 returns: 0 
Thread 2 returns: 0 

So sieht es aus wie das Problem nicht im Code, sondern etwas in der Umwelt. Ich habe HP-UX seit über 10 Jahren nicht mehr verwendet, daher kann ich Ihnen nicht helfen.

+0

Ja, es sieht so aus, als hätte es etwas mit der Umwelt zu tun. – Shree

+0

scheint es könnte die Link-Reihenfolge sein, überprüfen Sie meine bearbeitete Antwort. – claf