我有一个问题,在非递归的情况下,线程池可以很好地处理它,并且可以从任务(给池的工作/函数)中获益很多,从而可以向池中添加更多任务。我的线程池实现的问题在于,第一级任务填充所有工作线程,创建第二级任务,然后在等待第二级任务完成时阻塞。由于所有的工作线程都被阻塞,等待第二级完成,所以第二级任务永远不会执行,因此整个程序都会死锁。相关任务的线程池
这是否有任何通用的解决方案?可能是先发制人的线程池(如果甚至可能的话)。我确实认为有明确的优先任务,但问题在于它不会自动处理依赖关系;它需要更多API用户的工作。
在此先感谢您的任何见解或建议。
编辑:线程池类高清
class{
public:
thread_pool() = delete;
thread_pool(const thread_pool&) = delete;
thread_pool(unsigned int threads);
~thread_pool();
template<class T, class... Args>
std::future<T>
async(std::function<T(Args...)>&& f, Args&&... args);
template<class... Args>
std::future<void>
async(std::function<void(Args...)>&& f, Args&&... args);
template<class T>
std::future<T>
async(std::function<T()>&& f);
std::future<void>
async(std::function<void()>&& f);
protected:
void init_threads();
void join_threads();
};
如何阻断地图?一个一级任务是否创建一个二级任务或更多? –
请澄清:您已经创建了自己的线程池,而不是使用运行时环境或开发环境提供的线程池? –
@Martin:每个第n级任务可以添加任意数量的n + 1级任务。 – Tyler