有多个线程处理任务。一旦线程成功,所有线程都应该被取消,因为工作已经完成。一旦一个线程成功终止,我如何取消其他线程?谁将调用pthread_cancel ()
以及成功线程如何告诉main
或产生它的线程(返回值?)。
更新
我不想简单地调用exit
因为我现在想要一些控制权。例如,在取消线程之后,我将通过成功的线程处理找到的结果,并且可以进行更多的处理,或者只是想让流程继续运行以进行更多的工作。
答案 0 :(得分:4)
你可以选择一个简单的方案,其中main会做所有事情。
让main
启动所有线程并在某些信号量上执行down
。当一个线程完成任务时,在该信号量上执行up
。当main被解锁时,它可以pthread_cancel
所有线程(然后pthread_join
确保)。
这样main
启动和停止所有线程,所以它应该非常简单。
答案 1 :(得分:1)
一种简单的方法是调用exit()
来终止进程以及所有线程。它可以从任何线程调用。
另一种方法是让你的主线程产生并等待工作线程,并且一旦其中一个工作线程完成了:
pthread_cancel()
他们。默认情况下,线程是使用PTHREAD_CANCEL_DEFERRED
创建的,这意味着它们在调用任何取消点函数之前不会终止,有关详细说明,请参阅Thread Cancellation。因此,如果线程正在进行一些长计算,您可能希望将其取消状态设置为PTHREAD_CANCEL_ASYNCHRONOUS
以立即终止线程,请参阅pthread_setcanceltype。