1

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

2 に答える 2

4

編集: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で指定された値が無効です。

于 2009-04-10T09:04:29.277 に答える
0

これはコンパイルされ、Linuxボックスで実行され、次の結果が得られます。

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

したがって、問題はコードではなく、環境にあるように見えます。私はHP-UXを10年以上使用していないので、そこではお手伝いできません。

于 2009-04-10T09:11:27.637 に答える