2011-08-11 97 views
-1

當您使用thread_create創建線程並傳遞函數時,如果函數中存在無限循環,函數是否會永久運行? 如
c,正確使用線程

for(;;){ 
    //dosomthing 
} 

是否線程保持「做財產以後」直到線程被破壞,或程序完成?

感謝名單

+1

您的問題在您發佈的源代碼海中丟失。如果你刪除所有多餘的代碼並詢問一個清晰的概念,你可能有更大的機會獲得有用的答案。 –

+0

我認爲你顯示的是類似但不相關的pthreads代碼的負載。我不完全確定你在問什麼。 –

+0

在上面的例子中,你的程序將永遠運行直到線程終止。這取決於循環內部的內容。如果你的父線程想加入它將阻塞,直到完成。 – IanNorton

回答

1

當你調用thread_create()時生成將自身調用傳遞了函數的線程。例如:

pthread_t thread1; 
pthread_create(&thread1, NULL, thread_do, NULL); 

將創建一個新線程,新線程將運行函數thread_do()。 如果現在您已經定義thread_do()爲:

void* thread_do(){ 

    for(;;){ 
    // do something 
    } 

    return NULL; 
} 

則線程將進入無限循環確實如此。