1

Detached Threadsinを使用して次のコードをコンパイルして実行しようとしていますC Linuxprintf問題は、すべてのスレッドがハンドラーからの対応するものを表示するようにしたいのですが、*idThreadMethod何も表示されません! printf関数を呼び出す前にa を使用してみましたが、それが表示されますが、問題は(ハンドラー関数)pthread_create内にあるはずです。*idThreadMethodコード:

//gcc detachedThreads.c -lpthread -o p
//./p 4

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int i;

void *idThreadMethod(void *args)
{
    int pid;

    pid = *((int *)args);

    printf("\nI'm The Detached Thread %d\n", i);
    printf("\nMy PID is: %d\n", pid);

    pthread_exit(NULL);
}

int main(int argc, char *argv[])
{
    int quantityThreads, returnThread, pid;
    pthread_t idThread[15];
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);

    if(argc-1 < 1)
    {
        printf("\nSome arguments are missing\n");
        return EXIT_FAILURE;
    }

    quantityThreads = atoi(argv[1]);

    pid=getpid();
    int *it = &pid;

    for(i=0;i<quantityThreads;i++)
    {
        returnThread = pthread_create(&idThread[i],&attr,idThreadMethod,it);

        if(returnThread == -1)
        {
            printf("\nThere is an error trying to create the thread\n");
            return EXIT_FAILURE;
        }
    }                                                                                                                                                                                                                                                                                                                                                                                                                                                               

    return EXIT_SUCCESS;
}

関数printfからのメッセージを表示するにはどうすればよいですか?*idThreadMethod

4

2 に答える 2

2

メインでは、 を使用しますpthread_exit。あなたmainが終了しているため、残りのスレッドは、切り離されているかどうかにかかわらず、死んでいます。

于 2013-10-02T03:06:47.073 に答える
1

メインスレッドが終了する前に終了しているため、それらは表示されていませんprintfpthread_joinスレッドが切り離されているため、スレッドが処理を完了するのを待つことができないため、他の形式の同期が必要になります。

私には思えますが、切り離されたスレッドはまったく必要ありません....

于 2013-10-02T03:07:19.547 に答える