多线程环境中的共享指针

时间:2014-10-08 10:17:12

标签: c++ multithreading segmentation-fault shared-ptr

我的代码是这样的:

    vectorOfSharedPointers.resize(limit);

    parallelLoop(index, 0 , limit, increment = 1){ //process all the elements in parallel

            boost::shared_ptr<ClassA> ptrA;

            ptrA.reset(new ClassA(ref1, ref2, ostreamRef1, ostreamRef2)); // creates object of ClassA and assigns it to ptrA

            ptrA->setSomeAttribute(ref3); // calls some function on the object

            vectorOfSharedPointers[index] = ptrA; // this vector is class variable

    }

    for(int i =0 ; i<limit ; i++){

            boost::shared_ptr<ClassA> ptr  = vectorOfSharedPointers[i];

            ptr->someFunction();

    }

ostreamRef1和ostreamRef2是ostream类型的引用,指向std :: ostringstream类型的变量并创建为[std :: ostringstream strStream;]。

第一次调用此代码时,一切正常。第二次调用它时,ptr-> someFunction(),当 ostreamRef1 为空时,此函数会抛出分段错误。我不是在任何地方调用close()。 ostreamRef1 仅在 someFunction ()内发现为null,当我在此代码块中检查它时,它在实例 someFunction 时不为null( ) 叫做。我怀疑的是为什么它在 someFunction ()内部无效,但在调用 someFunction ()之前和之后在此代码块中有效。

我认为可能的罪魁祸首可能是:多线程,shared_ptr,两者的结合。

可能的原因和解决方案是什么?

0 个答案:

没有答案