我有一個類包裝器boost::asio::thread_pool m_pool。在包裝器的解構式中,我加入了所有執行緒:
ThreadPool::~ThreadPool()
{
m_pool.join();
cout << "All threads in Thread pool were completed";
}
我也有佇列方法來向執行緒池添加新任務:
void ThreadPool::queue(std::function<void()> task, std::string label)
{
boost::asio::post(m_pool, task);
cout << "In Thread pool was enqueued task: " << label;
}
在thread_pool 解構式的boost檔案中說:
如果事先沒有明確完成,則自動停止并加入池。
當 boost::asio::post 無休止地重復,當 boost::asio::thread_pool 解構式被觸發時,如何處理這種情況?我會得到類似無限執行緒池的東西嗎?
uj5u.com熱心網友回復:
1 1 == 2:只需洗掉join(). 正如您所指出的,這可能會無限期地阻塞。你不想要/不需要那個,那為什么要它呢?
或者,您可以手動停止并加入池。我建議洗掉解構式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/482812.html
上一篇:如何使用seleniumPython從頁面獲取彈出驗證訊息?
下一篇:如果boost::asio::thread_pool::join已經在作業時呼叫boost::asio::post會發生什么?
