编辑:我使用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()
我的问题是: