Я запускаю небольшую программу, созданную с использованием TBB в Windows с помощью mingw32. Он выполняет функцию parallel_for. Внутри parallel_for мой объект вносит изменения в объект concurrent_hash_map. Он запускается, но позже бросает SIGSEGV, когда я пытаюсь использовать аксессор. Я не знаю, где проблема.tbb :: concurrent_hash_map throws SIGSEGV
Мой объект:
class Foobar
{
public:
Foobar(FoobarParent* rw) : _rw(rw)
{
_fooMap = &_rw->randomWalkers();
}
void operator() (const tbb::blocked_range<size_t>&r) const
{
for(size_t i = r.begin(); i != r.end(); ++i)
{
apply(i);
}
}
private:
void apply(int i) const
{
pointMap_t::accessor a;
_fooMap->find(a, i);
Point3D current = a->second;
Point3D next = _rw->getNext(current);
if (!_rw->hasConstraint(next))
{
return;
}
a->second = next;
}
FoobarParent* _rw;
pointMap_t* _fooMap;
};
pointMap_t определяется как:
typedef tbb::concurrent_hash_map<int, Point3D> pointMap_t;
Может кто-то пролить свет на этот вопрос? Я новичок в TBB. Сигнал вызывается, когда метод apply вызывает a-> second.
Лучшее место, чтобы задать этот вопрос на форуме TBB. Кроме того, вы должны показать нам, как вы называете функцию parallel_for тоже. – Nav
@Nav Спасибо за ваш комментарий. Я закончил переписывание этого приложения без использования TBB. В следующий раз, когда я дам TBB попробовать, я буду использовать форум TBB. Спасибо! –