我有一個問題,在非遞歸的情況下,線程池可以很好地處理它,並且可以從任務(給池的工作/函數)中獲益很多,從而可以向池中添加更多任務。我的線程池實現的問題在於,第一級任務填充所有工作線程,創建第二級任務,然後在等待第二級任務完成時阻塞。由於所有的工作線程都被阻塞,等待第二級完成,所以第二級任務永遠不會執行,因此整個程序都會死鎖。相關任務的線程池
這是否有任何通用的解決方案?可能是先發制人的線程池(如果甚至可能的話)。我確實認爲有明確的優先任務,但問題在於它不會自動處理依賴關係;它需要更多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