C ++简单线程池

时间:2015-06-04 10:28:48

标签: c++ threadpool

我试图在c ++中实现一个简单的线程池,如下所示:

class worker {
public:
    worker();
    thread mThread;
private:
    void run();
};

worker::worker() {
    (this->mThread = thread(&worker::run, this)).detach();
}

class threadpool {
public:
    threadpool(int size);
    void addTask();
private:
    vector<worker> workers;
};

但是当我添加threadpool的构造函数时:

threadpool::threadpool(int size) {
    this->workers = vector<worker>(size, worker());
}

我得到“试图引用已删除的函数”错误,据我所知,这意味着在我的代码中某处我试图复制一个线程。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:3)

最小的变化是:

threadpool::threadpool(int size) {
    this->workers = vector<worker>(size);
}

也就是说,初始化列表很可爱。

threadpool::threadpool(int size)
  : workers{size}
{ }

(你应该int size更改为size_t或 - 如果您感觉圣洁 - vector<worker>::size_type)。

提供了一个请求复制的原型worker()对象,删除了隐式构造函数,因为您提供了一个显式的默认构造函数。