2016-11-09 60 views
2

我想實現的東西與C. P線程程序現在,我試圖讓一個線程打印的東西:打印單的Pthread

void * generator(void *arguments){ 
    printf("Hi"); 
    return NULL; 
} 

int main(int argc, const char* argv[]){ 
    pthread_create(&threads_ids[0], NULL, &generator, NULL);= 
} 

這不工作,沒有按」不打印任何東西。但是,當我在for循環中創建pthread時,它確實打印出「Hi」,但在每次執行時,事件都會有所不同。

這是正常的行爲,如果是這樣的話;我該如何解決它?提前致謝!

+1

將新行添加到輸出格式。否則消息不會出現(除非您刷新它們)。當你忽略命令行參數時使用'int main(void)'。 –

回答

7

這是因爲您的主線程返回並因此退出過程。這意味着你創建的線程永遠不會有機會運行。

不同於從main()返回,從main()調用pthread_exit(0),將讓其他線程繼續執行。

或者,您可以通過在您創建的線程上調用pthread_join()來等待線程完成執行。

當你在一個循環中執行時,你創建的一些線程可能會在主線程退出之前被執行,從而顯示「工作」(打印一些Hi)。 但它確實與您發佈的代碼具有相同的問題。