2011-07-19 182 views
2

我有一個並行的C程序在使用pthreads的共享內存架構上運行。如何在不殺死整個過程的情況下殺死一個線程?即如果一個線程先完成,我想在退出之前等待所有其他線程。 exit(status_code)殺死了我不想要的全部過程。我可以有一個障礙,等待所有線程到達障礙,然後退出,但可能有一個更簡單的方法?在C中殺死一個pthread而不殺死整個進程

謝謝。

回答

6

在「主」(驅動程序)線程中使用pthread_join以等待所有其他人終止。

爲了澄清什麼「線程終止」上述手段,看看pthread_exit手冊頁說:

執行從比隱式調用主線程結果的其他任何線程的啓動函數返回到了pthread_exit (),使用函數的返回值作爲線程的退出狀態。

所以pthread_join等待加入線程從它要麼返回啓動功能或致電pthread_exit

(你需要保留所有線程的跟蹤您創建使用此,沒有這些工作,如果你分離的處理線程 - 你可能不應該在這種情況下無論如何做。)

0

您希望爲應用程序使用join操作以等待線程。請看pthread man page以獲得良好的概述。

1

你可以調用pthread_exit()來結束喲所在的線程。如果你想殺死另一個線程中的線程,你可以撥打pthread_cancel(threadToKill)。要同步alll線程,您可以撥打pthread_join()

5

您可以使用pthread_join()函數來加入您的所有線程。

作爲一個例子,假設您創建了5個線程,並且當所有線程完成後,您想要從main函數中包含您的操作。

pthread_t threadId[5]; // holder for 5 thread 

// Create 5 threads 
for(index = 0; index < 5; index++) 
    pthread_create(&(threadId[index]), NULL, producer, (void *) &(argsForProducers[index])); 

// Join them 
for (index = 0; index < 5; index++) 
    pthread_join(threadId[index], NULL);