TBB任务执行有时不会被调用

时间:2018-02-28 09:39:11

标签: c++ multithreading tbb

编辑:我使用Windows 10 64位和TBB 2018 Update 2

我有2 tbb::task s:

struct QueueProcessingTask : public tbb::task
{
    QueueProcessingTask();
    ~QueueProcessingTask();

    task *execute();
};

struct MainScanTask : public tbb::task
{
    MainScanTask();
    ~MainScanTask();

    task *execute();

    QueueProcessingTask *m_pTask;
};

在我的主管理器对象中,我有一个

的实例
MainScanTask *m_mainTask;

我正在打电话

m_mainTask = new(tbb::task::allocate_root()) MainScanTask();
m_mainTask->execute();

其中execute

tbb::task *MainScanTask::execute()
{
    m_pTask = new(allocate_continuation())QueueProcessingTask();
    if (!m_pTask)
    {
        Trace("allocate_continuation() failed");
        return NULL;
    }
    QueueProcessingTask& task1 = *m_pTask;
    Trace("Spawning");
    spawn(task1);
    Trace("Spawned");

    return m_pTask;
}

这部分效果很好。但是,偶尔(可能每10次运行,或者可能每1000次运行),对spawn(task1)的调用似乎不会调用QueueProcessingTask' s {{1因而导致在运行的后期部分发生访问冲突。

我的日志打印件中有时没有打印

execute()

我的问题是:

  • 为什么?是否有更好的方法来实施这种机制
  • 我可以检测到这种情况并尝试再次产生吗?

0 个答案:

没有答案