我的問題是與C中的線程編程有關。 我的問題是我只是想在我的主程序中創建兩個線程。這兩個線程應該順序工作,這意味着我的第一個線程應該首先執行(不應該執行任何線程的其他語句)。第一個線程應該完全控制。在第一個線程完成之前,不應該執行任何其他線程的其他語句,甚至是主程序語句。C語言和多線程編程
完成第一個線程後,應該以與第一個線程類似的方式執行第二個線程。
之後,我的主要執行。
我知道你可以說爲什麼我要這樣做,因爲這個事情可以通過創建兩個函數並按順序調用它來實現,但爲了學習和實驗,我希望在線程。
我寫一些C代碼如下:
void* fun()
{
printf("\nThe thread 1 is running");
}
void* van()
{
printf("\nthread 2 is running ");
}
int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,fun,NULL);
pthread_create(&t2,NULL,van,NULL);
printf("\nI'm in main\n");
pthread_join(t2,NULL);
}
程序的工作完美,但我不理解的功能pthread_join()
的工作。
當我改變我的代碼有點如下:
int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,fun,NULL);
pthread_join(t2,NULL); // Change
pthread_create(&t2,NULL,van,NULL);
printf("\nI'm in main\n");
}
現在,當我運行的代碼它顯示了一個分段錯誤。
現在我的問題有以下幾點:
- 中有什麼
pthread_create()
功能的屬性參數?我們爲什麼要使用它們?線程的默認屬性是什麼?請用一個例子來解釋。 pthread_create()
函數中的參數是什麼?我們爲什麼使用它們?線程的默認參數是什麼?請用一個例子來解釋。pthread_join()
如何實際工作?當我的代碼主要使用pthread_join()
作爲第一個參數t2
時,這意味着什麼。這是否意味着main應該暫停執行,直到t2執行完成或其他什麼東西?pthread_join()
中的第二個參數是什麼?我們爲什麼用它?它的默認值是多少?請用一個例子或代碼來解釋。
你的線程函數應該返回一個值,即使它只是零,以便它們返回一個空的void指針。在「工作」代碼中,按照您的意圖進行排序純粹是巧合。兩個線程函數併發執行; 'main()'不會等待線程1在啓動線程2之前完成。如果等待線程1完成('pthread_join(&t1,NULL);'在其'pthread_create()'後面,那麼會最小化併發執行重複執行線程2.然後你可以在'main()'本身運行'printf()',因爲你已經等待每個線程完成了,你就完成了。 – 2011-06-03 05:49:37