所以这就是问题所在。我有一段代码,当只在一个线程中执行时,它工作得很好。但是一旦使用 TBB 调用此代码,它就会冻结(或者我只是没有耐心等待它完成!)。
代码太长了,想象一下:
class TBB_Test
{
public:
TBB_Test(void) { /* initialize the stuff */ }
void operator() (tbb::blocked_range<int> &r) const
{
for (int i = r.begin(); i != r.end(); ++i)
{
// compute very awesome stuff!
}
}
};
所以,当我按顺序执行它时:
TBB_Test() (tbb::blocked_range<int>(0, max_value));
它有效,但并行一次:
tbb::parallel_for(tbb::blocked_range<int>(0, max_value, grainsize), TBB_Test());
它冻结而不是比顺序更快。
什么会导致这样的事情?两个线程试图在同一个地方读或写?在我们的例子中,写作不应该发生!我们还有其他情况,多个线程可能读取相同的地址并且它不会冻结!
任何的想法?
在 VStudio 中,至少在那里,在调试时,只需激活,这样调试器就会在所有类型的异常中停止……很长,但是正确的方法!