我正在用C ++编写一个服务器,该服务器由一个接受传入请求的主线程组成,然后产生一个新的std :: thread对象来处理响应它的任务。
此std :: thread对象进入线程列表,我想定期清理该列表,如下所示:
For each thread in the list:
If the thread has finished executing:
Call join on the thread
Remove the thread object from the list
现在的挑战是如何确定此线程(正在执行void函数)是否已结束。 joinable()函数不起作用,因为它在执行中及执行后都会返回真实的值,并且我只希望主线程在完成后调用join(),否则它将挂起并等待串行的该子线程而不是并行执行。
答案 0 :(得分:0)
那么,您的体系结构选择是“每个请求的线程数”,那么您应该尊重一些有关副作用的核心事实。
鉴于此,您不应该为“如果线程处于活动状态”而烦恼。更好的是,您应该使用“线程池”习惯用法来减轻上述两种风险:
因此,您所需的流程应为:
For each thread in the list:
Wait for a new request to process
Get next request from the incoming queue
Process it