我有一个boost::thread_group
,我已使用thread_group
初始化了
e.g。 thread_group tg1;
并使用create_thread
填充。使用create_thread
时,线程开始执行。
我的线程组中的各个线程可以在不同的时间完成执行。我知道如果目标是等待线程组中的所有线程完成执行,则可以使用tg1.join_all()
。
然而,我理想的做法是调用此函数,等待最近完成的线程,从组中删除它并以适当的方式使用线程结果,然后再次调用该函数(它将要么等待,如果没有其他线程完成执行,或者它将立即返回已完成执行的下一个线程,就像常规join()
函数一样),直到该组为空。
boost库中是否有任何函数可以返回先完成的线程的线程ID?
答案 0 :(得分:3)
您可以创建一个带有条件变量的队列来等待。当任何线程完成时,它会将其结果(或对它们的引用或线程本身)放在此队列上,并发出条件信号。