2013-10-02 29 views
1

我試圖編譯並運行C Linux中使用Detached Threads的以下代碼。事情是,我希望每一個線程都能從處理器*idThreadMethod向我展示相應的printf,並且它不會顯示任何東西!在撥打pthread_create函數之前,我嘗試使用printf,它顯示它,但問題應該在*idThreadMethod(處理函數)中。代碼:分離主題:處理程序未顯示Printfs

//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; 
} 

我可以爲了顯示從*idThreadMethod功能printf信息做什麼?

回答

2

主要使用pthread_exit。您的main正在退出,因此您的線程的其餘部分死亡,分離或不。

1

他們沒有顯示,因爲您的主線程在他們有機會到printf之前即將退出。當你的線程被分離時,你不能使用pthread_join等待他們做他們的事情,所以你需要一些其他形式的同步。

對我來說,你根本不想要脫離的線程......