pthread возвращает 251 - PullRequest
       13

pthread возвращает 251

1 голос
/ 10 апреля 2009

pthread_create возвращает значение 251 без создания потока. Кто-нибудь знает в чем проблема? Пожалуйста помоги. Машина HP-UX.

Я новичок в многопоточности.

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

Ответы [ 2 ]

4 голосов
/ 10 апреля 2009

Редактировать: на HP-UX11. Сбой pthread_create с ошибкой 251. Функция недоступна.

Проверьте, стоит ли -lc перед -lpthread в вашем порядке ссылок. Если это так, то вызов разрешит заглушку в C-библиотеке и может вызвать эту ошибку.


Вы связались с -lpthread?

Вы должны использовать errno.h, чтобы увидеть, какая ошибка 251 в вашей системе, или это должно дать вам более подробное сообщение:

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

Более того, при использовании pthread вы должны проверять возвращаемое значение почти при каждом вызове pthread * (см. man каждой функции для проверки возможной возвращаемой ошибки)

Для pthread_create у вас есть как минимум 2 возможные ошибки (в зависимости от вашей системы и реализации pthread):

pthread_create () завершится ошибкой, если:

[EAGAIN] Системе не хватало необходимых ресурсов для создания другой поток, или системный лимит на общее количество потоков в процессе [PTHREAD_THREADS_MAX] будет превышено.

[EINVAL] Недопустимое значение, указанное attr.

0 голосов
/ 10 апреля 2009

Это компилируется и запускается на моем Linux-компьютере со следующим результатом:

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

Похоже, проблема не в вашем коде, а в чем-то в среде. Я не использую HP-UX более 10 лет, поэтому не могу вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...