1

mingw32を使用して、WindowsでTBBを使用して構築された小さなプログラムを実行しています。これは、parallel_for を実行します。オブジェクトの parallel_for 内で、concurrent_hash_map オブジェクトに変更を加えます。実行を開始しますが、後でアクセサーを使用しようとすると 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 を呼び出すと、シグナルがスローされます。

4

1 に答える 1