我有一個並行的C程序在使用pthreads的共享內存架構上運行。如何在不殺死整個過程的情況下殺死一個線程?即如果一個線程先完成,我想在退出之前等待所有其他線程。 exit(status_code)
殺死了我不想要的全部過程。我可以有一個障礙,等待所有線程到達障礙,然後退出,但可能有一個更簡單的方法?在C中殺死一個pthread而不殺死整個進程
謝謝。
我有一個並行的C程序在使用pthreads的共享內存架構上運行。如何在不殺死整個過程的情況下殺死一個線程?即如果一個線程先完成,我想在退出之前等待所有其他線程。 exit(status_code)
殺死了我不想要的全部過程。我可以有一個障礙,等待所有線程到達障礙,然後退出,但可能有一個更簡單的方法?在C中殺死一個pthread而不殺死整個進程
謝謝。
在「主」(驅動程序)線程中使用pthread_join
以等待所有其他人終止。
爲了澄清什麼「線程終止」上述手段,看看pthread_exit
手冊頁說:
執行從比隱式調用主線程結果的其他任何線程的啓動函數返回到了pthread_exit (),使用函數的返回值作爲線程的退出狀態。
所以pthread_join
等待加入線程從它要麼返回啓動功能或致電pthread_exit
。
(你需要保留所有線程的跟蹤您創建使用此,沒有這些工作,如果你分離的處理線程 - 你可能不應該在這種情況下無論如何做。)
您希望爲應用程序使用join
操作以等待線程。請看pthread man page以獲得良好的概述。
你可以調用pthread_exit()
來結束喲所在的線程。如果你想殺死另一個線程中的線程,你可以撥打pthread_cancel(threadToKill)
。要同步alll線程,您可以撥打pthread_join()
。
您可以使用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);