2016-09-27 53 views
0

我是C中的多線程新手。我看了一些在線示例,發現在主函數中總是調用pthread_create()和pthread_join()。 爲〔實施例:必須在主函數中調用pthread_create()和pthread_join()嗎?

#include <stdio.h> 
#include <pthread.h> 

#define NTHREADS 10 
void *thread_function(void *); 
main() 
{ 
    pthread_t thread_id[NTHREADS]; 
    int i, j; 

    for(i=0; i < NTHREADS; i++) 
    { 
     pthread_create(&thread_id[i], NULL, thread_function, NULL); 
    } 

    for(j=0; j < NTHREADS; j++) 
    { 
     pthread_join(thread_id[j], NULL); 
    } 

} 

我的問題是,是否有可能調用pthread_create(),並在pthread_join()比的主要功能之外的其他功能?我還看到了在thread_function前面有'&'的例子,是否有必要?如果是這樣,爲什麼?

+0

使用'thread_function'和'&thread_function'在這裏是等價的。 – alk

回答

3

是的,你也可以在其他函數中調用它們。

+0

我在網上找不到任何例子,你能解釋爲什麼他們總是被稱爲主函數嗎? – ascetic652

+0

'main()',就像其他函數一樣,代表一個程序中的邏輯單元。我個人喜歡我的'main()'函數來調用一個線程創建函數,但這取決於你。例如,這是'main()'中的函數調用:'initThreadsArray(tp,C_lock); //這個函數使用pthread_create'初始化線程 – galfisher

+0

謝謝!另一個問題,當調用pthread_create()時,是否必須在thread_function前添加'&'? – ascetic652

3

絕對可以從其他函數調用這些函數。大多數在線示例顯示從main調用的這些功能的原因是,他們試圖讓他們的示例更短,更易於理解。

但更重要的是pthread_createpthread_join調用可以從其他線程進行,而不僅僅是來自主線程上運行的其他函數。對於主線程以外的其他線程來說,啓動其他線程並等待它們完成是完全合法的。只要線程處理有效且可訪問,線程就可以等待對方完成,並根據需要創建新線程。

相關問題