2009-04-10 9 views
1

pthread_create renvoie la valeur 251 sans créer le thread. Quelqu'un sait-il quel est le problème? S'il vous plaît aider. La machine est un HP-UX.pthread renvoie 251

Je suis novice dans le domaine du multi-threading.

#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); 
    } 

Répondre

4

Modifier: Sur HP-UX11. pthread_create échoue avec l'erreur 251: La fonction n'est pas disponible.

Vérifiez si -lc vient avant -lpthread dans votre ordre de lien. Si tel est le cas, l'appel se résoudrait à se terminer dans la bibliothèque C et pourrait provoquer cette erreur.


Avez-vous créé un lien avec -lpthread?

Vous devez utiliser errno.h pour voir quelle erreur 251 est sur votre système ou cela, vous devez donner un message plus détaillée:

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

De plus, lors de l'utilisation pthread, vous devriez vérifier la valeur de retour de presque tous les appels à pthread * (voir le man de chaque fonction de vérifier d'erreur possible retour)

pour pthread_create, vous avez au moins 2 erreurs possibles (en fonction de votre système et la mise en œuvre pthread):

pthread_create() échouera si:

[EAGAIN] Le système n'a pas les ressources nécessaires pour créer un autre fil, ou la limite imposée système sur le nombre total de fils dans un procédé [PTHREAD_THREADS_MAX] serait dépassé .

[EINVAL] La valeur spécifiée par attr n'est pas valide.

0

Ceci compile et fonctionne sur ma boîte Linux avec le résultat suivant:

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

Il semble donc que le problème est pas dans votre code, mais quelque chose dans l'environnement. Je n'ai pas utilisé HP-UX depuis plus de 10 ans, je ne peux donc pas vous aider.

+0

Oui, on dirait que ça a quelque chose à voir avec l'environnement. – Shree

+0

semble que ce pourrait être l'ordre de lien, vérifiez ma réponse éditée. – claf