【发布时间】:2018-02-23 14:30:33
【问题描述】:
我正在使用 MultiThreading 类,它在自己的线程池中创建所需数量的线程,并在使用后自行删除。
std::thread *m_pool; //number of threads according to available cores
std::mutex m_locker;
std::condition_variable m_condition;
std::atomic<bool> m_exit;
int m_processors
m_pool = new std::thread[m_processors + 1]
void func()
{
//code
}
for (int i = 0; i < m_processors; i++)
{
m_pool[i] = std::thread(func);
}
void reset(void)
{
{
std::lock_guard<std::mutex> lock(m_locker);
m_exit = true;
}
m_condition.notify_all();
for(int i = 0; i <= m_processors; i++)
m_pool[i].join();
delete[] m_pool;
}
在运行完所有任务后,for 循环应该在delete[] 被执行之前加入所有正在运行的线程。
但似乎最后一个线程仍在运行,而 m_pool 不再存在。
这导致了问题,我不能再关闭我的程序了。
有什么方法可以检查所有线程是否已加入或等待所有线程加入后再删除线程池?
【问题讨论】:
-
注意你的循环条件
i < m_processors...i <= m_processors
标签: multithreading c++11 mutex