创建两个类:
- CThreadGroup:启动一个线程数和等待他们(使用连接)完成。
- CMainThread:启动一系列此类(CThreadGroup)并等待它们完成(使用连接)。作为inout参数启动CThreadGroup的数量以及启动多少个子线程CThreadGroup
在main中声明CMainThread类型的一个对象。
这里是类的原型:
主线程
#include "ThreadGroup.h"
#include <mutex>
class CMainThread
{
std::vector<CThreadGroup> vThreadGroups;
std::vector<std::thread> vThreads;
const unsigned int nbMainThreads;
const unsigned int nbSubthreads;
public:
CMainThread(unsigned int nbMainThreads,
unsigned int nbSubthreads);
~CMainThread(void);
};
#include <thread>
#include <vector>
class CThreadGroup
{
const unsigned int nbThreads;
public:
CThreadGroup(unsigned int nbThreads);
~CThreadGroup(void);
};
线程组
#include <thread>
#include <vector>
class CThreadGroup
{
const unsigned int nbThreads;
public:
CThreadGroup(unsigned int nbThreads);
~CThreadGroup(void);
};
这里是cpp文件
CMainThread::CMainThread(unsigned int nbMainThreads_,
unsigned int nbSubthreads_):
nbMainThreads(nbMainThreads_),
nbSubthreads(nbSubthreads_)
{
std::mutex mut;
for (unsigned int i=0;i<nbMainThreads;++i)
{
vThreads.push_back(std::thread([&]{
CThreadGroup currThread(nbSubthreads);
std::lock_guard<std::mutex> lock(mut);
vThreadGroups.push_back(currThread);
}));
}
for (auto it=vThreads.begin(); it!=vThreads.end(); ++it)
{
it->join();
}
}
线程组
CThreadGroup::CThreadGroup(unsigned int nbThreads_):
nbThreads(nbThreads_)
{
std::vector<std::thread> vThreads;
for (unsigned int i=0;i<nbThreads;++i)
{
vThreads.push_back(std::thread([i]{std::this_thread::sleep_for(std::chrono::seconds(i));}));
}
for (auto it=vThreads.begin(); it!=vThreads.end(); ++it)
{
it->join();
}
}
希望帮助,
哪些线程在做什么?他们是否得到自己的一块数据来处理数据,还是共享数据? –
子任务在给定组内是独立的,并且这些组独立于其他组。 –
为了澄清,任务仅仅是一个需要执行的功能,所以我想我会对它们进行排队。该队列必须是线程安全的,我必须弄清楚如何确定属于某个组的所有任务何时完成,以及何时完成所有组。 –