如何判断boost :: thread是否已完成执行?

时间:2011-11-19 04:31:33

标签: c++ multithreading boost

我不一定要使用join()并等待线程完成,但更多我想简要检查线程是否仍在执行。我确实想过timed_join(0),但我不确定这是否安全。这里有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您应该使用事件/通知机制让线程在完成时发出信号,并使用整个事件等待所有线程完成。这被称为倒计时锁存器(参见http://msdn.microsoft.com/en-us/magazine/cc163427.aspx#S1)。您可以使用boost条件变量和由boost mutex保护的int计数器构建一个。

更简单的方法应该是顺序连接循环中的所有线程。没有必要尝试并行化这一点,因为在最坏的情况下,第一次连接将花费比所有其他线程更长的时间,但到那时其余的连接将花费零时间(因为它们都已完成)。

如果您对允许首先完成哪些线程以及复杂的生命周期图表存在硬性依赖关系,则应考虑使用类/数据结构来表示这些,以提高抽象级别,以便外部服务员不需要直接关注这些细节。