簡體   English   中英

C ++簡單線程池

[英]C++ Simple Thread Pool

我試圖在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(int size) {
    this->workers = vector<worker>(size, worker());
}

我收到“試圖引用已刪除的函數”錯誤,據我所知,這意味着我試圖在代碼中的某個地方復制線程。 有什么辦法解決這個問題?

最小的更改是:

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

也就是說,初始化程序列表很不錯。

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

(您應該int size更改為size_t或者-如果您感覺很聖潔--vector vector<worker>::size_type )。

它提供了一個請求復制的原型worker()對象,由於您提供了顯式的默認構造函數,因此刪除了隱式構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM