Multithreading 在辅助任务内使用QThreadPool

Multithreading 在辅助任务内使用QThreadPool,multithreading,qt,c++11,Multithreading,Qt,C++11,我有一个运行一些任务的QThreadPool。 我还需要在其他任务中创建新任务。 要做到这一点,我认为应该执行以下操作: class Task : public QRunnable { QThreadPool *pool; public: Task (QThreadPool *p) : pool(p){} void run() { static std::atomic<int> counter = ATOMIC_FLAG_INIT;

我有一个运行一些任务的QThreadPool。 我还需要在其他任务中创建新任务。 要做到这一点,我认为应该执行以下操作:

class Task : public QRunnable
{
    QThreadPool *pool;
public:
    Task (QThreadPool *p) : pool(p){}

    void run()
    {
        static std::atomic<int> counter = ATOMIC_FLAG_INIT;
        qDebug() << QThread::currentThreadId();

        int c;
        if ((c = counter.load(std::memory_order_acquire)) < 10) {
            pool->start(new Task(pool));
            counter.store(c + 1, std::memory_order_release);
        }

    }
};

int main(int argc, char *argv[])
{
    //...

    QThreadPool threadPool;
    threadPool.start(new Task(&threadPool));

    //...
}
类任务:无法命名
{
QThreadPool*池;
公众:
任务(QThreadPool*p):池(p){}
无效运行()
{
静态std::原子计数器=原子标志初始化;
qDebug()启动(新任务(池));
计数器存储(c+1,标准::内存\订单\释放);
}
}
};
int main(int argc,char*argv[])
{
//...
QThreadPool线程池;
启动(新任务(&threadPool));
//...
}

但是我不确定这是不是正确的方法。

一般方法看起来不错,但是单独的
加载
/
存储
计数器是不安全的(因为它可以在调用之间更改)。然而,如果您只使用它来控制并行任务的数量,您甚至不需要它。应该用来控制它。@Felix好的,谢谢